一:在新表已经建立好的情况下

mysql通过一张表更新另一张表,mysql一张另一张表

【mysql】关于临时表,【mysql】

mysql单表,mysql单表最大行数

数据库的创建和删除
  黑窗口启动数据库服务:net start mysql
  关闭数据库服务:net stop mysql

创建数据库
使用关键字create database
格式:
create database 数据库名;
create database 数据库名 character set 字符集;

查看mysql中所有的数据库
show databases;

查看某个数据库的定义信息
show create database 数据库名 例:show create database mybase;

切换数据库
use 数据库名 例:use test;

查看正在使用的数据库
select database;

删除数据库
drop database 数据库名称 例:drop database test;

创建数据库中的表.

使用关键字create table
[]在数据库中是可选的意思,可以有,可以没有
格式:
create table 表名(
  字段名 数据类型[长度] [约束],
  字段名 数据类型[长度] [约束],
  ……
  字段名 数据类型[长度] [约束](最后一个不能有逗号)
);
例:创建商品分类表category
create table category(
  cid int primary key,
  cname varchar(100)
);

查看当前数据库中所有的表
show tables;

查看表结构
desc 表名 例:desc category;

删除表
格式:drop table 表名
例:drop table category;

修改表添加列
alter table 表名 add 列名 类型[长度] [约束];
例:alter table category add name int ;

修改表修改列的类型长度及约束
alter table 表名 modify 列名 类型[长度] [约束];
注意:如果有数据 ,必须注意数据类型varchar–>容易有错误数据
例:alter table category modify description int;
alter table category modify description varchar(20) not null;

修改列名以及数据类型和约束
alter tble 表名 drop 列名;
注意:如果列中有数据 数据就会一起删除了 需谨慎
例:alter table category drop descr;

修改表名
rename table 表名 to 新表名
例:rename table category to student;

修改表的字符集
alter table 表名 character set 字符集
注意:不建议执行 有可能会产生乱码
例:alter table category character set gbk;

往数据库表中插入数据
使用关键字insert [into]
格式:
包含主键:insert into 表名(字段1,字段2,….) values (值1,值2,….);
主键自增,省略主键:insert into 表名 (不包含主键) values (不包含主键);
注意事项:
1.字段和值一定要一一对应(个数,数据类型)
2.除了数值类型(int ,double),其他的数据类型都需要使用引号包裹起来
可以使用”.也可以使用””,建议使用”
包含主键:insert into 表名 (字段1,字段2,…) values (值1,值2,….);
例:insert into category (cid,cname) values (1,”服装”);
insert into category (cid,cname) values (1,”彩电”);

创建category表主键自增auto_increment(主键自己添加,自己增长)
例:create table category(
  cid int primary key auto_increment,
  cname varchar(100)
);
主键自增,省略主键:insert into 表名 (不包含主键) values (不包含主键);
例:insert into category (cname) values (“彩电”);

 

批量插入数据
格式:
包含主键:insert into 表名 (字段1,字段2,…) values
(值1,值2,…),(值1,值2,…),(值1,值2,…);
主键自增,省略主键:insert into 表名 (不包含主键) values
(值1,值2,…),(值1,值2,…)..;
insert into category (cid,cname) values (3,’空调’),(4,’洗衣机’);
insert into category (cname) values (‘微波炉’),(‘电磁炉’);

省略字段名格式:必须给出全部字段的值(包含主键)
格式:
insert into 表名 values (全部字段的值);
insert into 表名 values (全部字段的值),(全部字段的值),..;
例:insert into category values(7,’冰箱’);
insert into category values(8,’笔记本电脑’),(‘台式机’);

添加数据,记不住主键的情况下,可以使用null ,sql会自动计算主键
例:insert into category values (null,’小米6′);

澳门皇冠金沙网站,更新表数据,使用关键字update(更新,修改) set(设置)
格式:
不带条件过滤,一次修改列中所有的数据
update 表名 set 字段名=字段值,字段名=字段值,…;
带条件过滤,使用关键字where
update 表名 set 字段名=字段值,字段名=字段值,…where 过滤条件;
不低条件过滤(慎用)
例:update category set cname=’全部修改’;
带条件过滤,使用关键字where
update category set cname=’黑白电视机’ where cid=4;

删除表数据 使用关键字delete from
格式:
delete from 表名 [where 条件过滤];
delete from 表名 删除表中的所有数据,但是不会删除主键自增
truncate table
表名;删除表中的所有数据,会删除主键自增,让主键自增重置从1开始
delete from 表名 [where 条件过滤];
例:delete from category where cid=4;
delete from 表名
例:delete from category;
使用delete删除之后插入数据,主键会出现断号,没有之前的序号
insert into category (cname) values (‘手机’);
delete from category where cid=12;
insert into category (cid,cname) values(12,’手动插入指定的主键列’);

truncate table 表名
例:truncate table category

主键约束
使用关键primary key
作用:
约束主键列不能为null
不能重复
每个表都必须有一个主键,且只能有一个主键
主键不能使用业务数据

添加主键的第一种方式
在列名之后直接添加
create table persons(
  Id_p int primary key,
  LastName varchar(255),
  FirstName varchar(255),
  Address varchar(255),
  City varchar(255)
);
insert into persons(Id_p,LastName) values (1,’张’);
insert into persons(Id_p,LastName) values (null,’张’);– 非空
insert into persons(Id_p,LastName) values (1,’张’);– 重复

添加主键的第二种方式
使用constraint区域
格式:
[constraint 名称] primary key (字段列表)
CREATE TABLE persons(
  Id_P INT,
  LastName VARCHAR(255),
  FirstName VARCHAR(255),
  Address VARCHAR(255),
  City VARCHAR(255),
  CONSTRAINT pk_id_p PRIMARY KEY(Id_P)
);
constraint如果不给出主键的名字,可以省略关键字constraint
CREATE TABLE persons(
  Id_P INT,
  LastName VARCHAR(255),
  FirstName VARCHAR(255),
  Address VARCHAR(255),
  City VARCHAR(255),
  PRIMARY KEY(Id_P)
);

添加主键的第三种方式
创建表之后,通过修改表结构,添加主键的第一种方式
alter table 表名 add [constraint 名称] primary key (字段列表);
CREATE TABLE persons(
  Id_P INT,
  LastName VARCHAR(255),
  FirstName VARCHAR(255),
  Address VARCHAR(255),
  City VARCHAR(255)
);
ALTER TABLE persons ADD PRIMARY KEY(Id_P);

删除主键
alter table persons drop primary key;

联合主键
使用两个以上的字段为主键
CREATE TABLE persons(
  Id_P INT,
  LastName VARCHAR(255),
  FirstName VARCHAR(255),
  Address VARCHAR(255),
  City VARCHAR(255),
  PRIMARY KEY(LastName,FirstName)
);

非空约束
使用关键字not null
作用:强制约束某一列不能为null(不接受null值)

创建非空约束的第一种格式,创建表示,字段后直接给出
CREATE TABLE persons(
  Id_P INT PRIMARY KEY AUTO_INCREMENT,
  LastName VARCHAR(255),
  FirstName VARCHAR(255),
  Address VARCHAR(255),
  City VARCHAR(255) NOT NULL
);
添加数据
INSERT INTO persons(lastname,city) VALUES(‘张’,’雄县’);
INSERT INTO persons(lastname,city) VALUES(‘李’,’null’);
INSERT INTO persons(lastname,city) VALUES(‘王’,”);
INSERT INTO persons(lastname,city) VALUES(‘赵’,NULL);– Column ‘City’
cannot be null

java四大皆空
String s =””;s=”null” s=null; void

创建非空约束方式二
修改表结构
alter table 表名 modify 列名 类型[长度] [约束];
CREATE TABLE persons(
  Id_P INT PRIMARY KEY AUTO_INCREMENT,
  LastName VARCHAR(255),
  FirstName VARCHAR(255),
  Address VARCHAR(255),
  City VARCHAR(255)
);
ALTER TABLE persons MODIFY city VARCHAR(255)NOT NULL;

删除非空约束
alter table persons modify city varchar(255);

 

唯一约束
使用关键字unique
作用:添加了唯一约束的字段,不能重复

创建唯一约束的第一种格式,创建表时,在字段后直接给出
CREATE TABLE persons(
  Id_P INT PRIMARY KEY AUTO_INCREMENT,
  LastName VARCHAR(255),
  FirstName VARCHAR(255),
  Address VARCHAR(255),
  City VARCHAR(255) UNIQUE
);
INSERT INTO persons (lastname,city) VALUES(‘张’,’毛里求斯’);
— Duplicate entry ‘毛里求斯’ for key ‘City’
INSERT INTO persons (lastname,city) VALUES(‘王’,’毛里求斯’);

创建唯一约束的第二种格式,创建表时使用[constraint 名称] unique
(字段列表)

CREATE TABLE persons(
  Id_P INT PRIMARY KEY AUTO_INCREMENT,
  LastName VARCHAR(255),
  FirstName VARCHAR(255),
  Address VARCHAR(255),
  City VARCHAR(255),
  CONSTRAINT UNIQUE(City)
);

创建唯一约束的第三种格式,创建表之后,修改表数据
alter table 表名 modify 列名 类型[长度] [约束];
CREATE TABLE persons(
  Id_P INT PRIMARY KEY AUTO_INCREMENT,
  LastName VARCHAR(255),
  FirstName VARCHAR(255),
  Address VARCHAR(255),
  City VARCHAR(255)
);
ALTER TABLE persons MODIFY city VARCHAR(255) UNIQUE;
alter table 表名 add [constraint 名称] unique (字段列表)
CREATE TABLE persons(
  Id_P INT PRIMARY KEY AUTO_INCREMENT,
  LastName VARCHAR(255),
  FirstName VARCHAR(255),
  Address VARCHAR(255),
  City VARCHAR(255)
);
ALTER TABLE persons ADD UNIQUE(City);

删除唯一约束
alert table persons drop index 名称
定义约束的时候,如果没有创建名称,则名称为字符串
alter table persons drop index city;

默认约束
给字段添加一个默认值,如果字段没有插入值,则使用默认值
使用关键字default值
创建默认约束方式一,创建表,列数据类型后面 default ‘默认值’
CREATE TABLE persons(
  Id_P INT PRIMARY KEY AUTO_INCREMENT,
  LastName VARCHAR(255),
  FirstName VARCHAR(255),
  Address VARCHAR(255),
  City VARCHAR(255)DEFAULT ‘中国’
);
INSERT INTO persons (lastname) VALUES(‘张’);
INSERT INTO persons (lastname,city) VALUES(‘张’,’加拿大’);

数据库的创建和删除
黑窗口启动数据库服务:net start mysql 关闭数据库服务:net stop mysql
创建数据库 使用关键字…

mysql用一个表更新另一个表的方法,mysql更新另一个表

Solution 1:  修改1列

update student s, city c
set s.city_name = c.name
where s.city_code = c.code;

Solution 2:  修改多个列

update  a,  b

set a.title=b.title, a.name=b.name
where a.id=b.id

Solution 3: 采用子查询

update student s set city_name = (select name from city where code =
s.city_code);

以上这篇mysql用一个表更新另一个表的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持帮客之家。

Solution 1: 修改1列 update student s, city c set s.city_name = c.name
where s.city_code = c.code; Solution…

1,拷贝所有的字段

 

在mysql中,通过一张表的列修改另一张关联表中的内容:

1:  修改1列

update student s, city c
   set s.city_name = c.name
 where s.city_code = c.code;

 

2:  修改多个列

update a, b 
set a.title=b.title, a.name=b.name
where a.id=b.id

 

3: 采用子查询

update student s set city_name = (select name from city where code = s.city_code);

 

REF:

在mysql中,通过一张表的列修改另一张关联表中的内容: 1: 修改1列 update
student s, city c s…

mysql官方的介绍

In some cases, the server creates internal temporary tables while
processing queries. Such a table can be held in memory and processed by
the MEMORY storage engine, or stored on disk and processed by
the MyISAM storage engine. The server may create a temporary table
initially as an in-memory table, then convert it to an on-disk table if
it becomes too large. Users have no direct control over when the server
creates an internal temporary table or which storage engine the server
uses to manage it

以下几种情况会创建临时表

  • UNION查询
  • 用到TEMPTABLE算法或者是UNION查询中的视图
  • 在JOIN查询中,ORDER BY或者GROUP BY使用了不是第一个表的列
    例如:SELECT * from TableA, TableB ORDER BY TableA.price GROUP by
    TableB.name
  • 表连接中,ORDER BY的列不是驱动表中的
  • DISTINCT查询并且加上ORDER BY时
  • SQL中用到SQL_SMALL_RESULT选项时
  • FROM中的子查询
  • 子查询或者semi-join时创建的表
  • 多表更新sql
  • GROUP_CONCAT() or COUNT(DISTINCT) evaluation

在以下几种情况下,会创建磁盘临时表

  • 表包含TEXT或者BLOB列
  • 在 GROUP BY 或者 DSTINCT 的列中有超过 512字符 的字符类型列(或者超过
    512字节的 二进制类型列,在5.6.15之前只管是否超过512字节)
  • 在SELECT、UNION、UNION
    ALL查询中,存在最大长度超过512的列(对于字符串类型是512个字符,对于二进制类型则是512字节)
  • 执行SHOW
    COLUMNS/FIELDS、DESCRIBE等SQL命令,因为它们的执行结果用到了BLOB列类型

临时表相关配置

tmp_table_size:指定系统创建的内存临时表最大大小

max_heap_table_size: 指定用户创建的内存表的最大大小

The maximum size for in-memory temporary tables is the minimum of
thetmp_table_size and max_heap_table_size values

insert into new_table select * from old_table

优化建议 

一般要避免使用临时表

1、在ORDER BY或者GROUP BY的列上创建索引

2、TEXT、BLOB等大字段,拆分表

 

从5.7.5开始,新增一个系统选项 internal_tmp_disk_storage_engine 可定义磁盘临时表的引擎类型为
InnoDB,而在这以前,只能使用 MyISAM。

在5.6.3以后新增的系统选项 default_tmp_storage_engine 是控制 CREATE
TEMPORARY
TABLE 创建的临时表的引擎类型,在以前默认是MEMORY,不要把这二者混淆了

ysql> show variables like 'default_tmp%'; 
+----------------------------+--------+
| Variable_name              | Value  |
+----------------------------+--------+
| default_tmp_storage_engine | InnoDB |
+----------------------------+--------+
1 row in set (0.00 sec)

mysql> create temporary table tmp1(id int not null);  
Query OK, 0 rows affected (0.17 sec)

mysql> show create table tmp1 \G
*************************** 1. row ***************************
       Table: tmp1
Create Table: CREATE TEMPORARY TABLE `tmp1` (
  `id` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

mysql> set default_tmp_storage_engine = myisam;
Query OK, 0 rows affected (0.00 sec)

mysql> create temporary table tmp2 (id int(11) unsigned not null comment 'primary key' );
Query OK, 0 rows affected (0.01 sec)

mysql> show create table tmp2 \G
*************************** 1. row ***************************
       Table: tmp2
Create Table: CREATE TEMPORARY TABLE `tmp2` (
  `id` int(11) unsigned NOT NULL COMMENT 'primary key'
) ENGINE=MyISAM DEFAULT CHARSET=utf8
1 row in set (0.00 sec)


mysql> set default_tmp_storage_engine = memory;
Query OK, 0 rows affected (0.00 sec)

mysql> create temporary table tmp3 (id int(11) unsigned not null comment 'primary key' ); 
Query OK, 0 rows affected (0.00 sec)
mysql> show create table tmp3 \G
*************************** 1. row ***************************
       Table: tmp3
Create Table: CREATE TEMPORARY TABLE `tmp3` (
  `id` int(11) unsigned NOT NULL COMMENT 'primary key'
) ENGINE=MEMORY DEFAULT CHARSET=utf8

 

参考: 

mysql官方的介绍 In
some cases, the server creates internal temporary tables while
processing queries. Such a table can be held in memo…

2,拷贝部分字段表

insert into new_table(id,name,sex) select id,name,sex from old_table

3,拷贝部分的行

insert into new_table select  *  from old_table where id=”1″

4,拷贝部分的行和字段

insert into new_table(id,name,sex) select id,name,sex form old_table
where id=’1′

二:在新表还没有建的情况下

方案一:

create table new_table (select * from old_table)

这种方案建的话,只是拷贝的查询的结果,新表不会有主键和索引

方案二:

create table new_table LIKE old_table

该方案只能拷贝表结构到新表中,不会拷贝数据

方案三:

如果要真正的复制一个数据到新表,我们可以直接执行下面的语句

create table new_table LIKE old_table;

insert into new_table select * from old_table;

三:我们也可以操作其它的数据库中的表

create table new_table LIKE ortherdatabase.old_table;

insert into new_table select * from ortherdatabase.old_table;

ortherdatabase.old_table中的ortherdatabase是指定的数据库名

四:我们也可以在新建表时改名字

create table new_table (select id,name as username from old_table)

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图