mysql_建表

时间:2024-03-24 18:06:38

建表

某字段多个默认值

  创建表时,对多选多的字段设置两个以上的默认值时,两个默认值之间用逗号','隔开,不能加空格。

create table student2(
id int not null,
name varchar(50) not null,
age int(3) unsigned not null default 8,
sex enum('male', 'female') default 'male',
fav set('smoke', 'drink', 'tangtou') default 'drink,tangtou'
);

  当添加空格时就会报错,报错信息如下:

ERROR 1067 (42000): Invalid default value for 'fav'

第一个字段不能使用in

  在创建表的过程中,第一个字段(也就是原来的id字段,这里说in是因为手滑打错了)不能够使用in,否则会报错.

create table department0(
in int,
name char(10),
unique(id),
unique(name)
);

报错信息如下:

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'in int,
name char(10),
unique(id),
unique(name)
)' at line 2

联合唯一索引

  创建表时,设置联合唯一,意思就是表中的一条记录不能完全相同,其中的一个数据单元可以相同,但是被用来创建联合唯一索引的那几个字段的数据单元组合记录不能相同。

复合主键

  复合主键,将其中的两列组合作为主键,组成复合主键的两个单元的组合完全相同时,报错。

delete from

  使用delete from 表名; 删除一个表时,删除的只是表中的数据,表的结构依然存在;当再次往表中添加数据时,这条数据的ID会接着删除之前的最后一条数据的ID往后增加。并且delete是逐条的删除记录,删除速度较慢。

truncate

  使用truncate 表名;  删除表时,同样也删除表中的数据,但是与delete不同的是,truncate删除过的表再次插入数据时,记录的ID会从1开始增加,truncate删除表是一下子清空表中的数据,删除速度快,删除数据时使用truncate比较多。

步长

  show variables like 'auto_inc%';  查看可用的开头可自增步长;

  % 为通配符。

+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| auto_increment_increment | 1 | # 步长
| auto_increment_offset | 1 | # 开头
+--------------------------+-------+

  设置步长,只在本次会话中有效,退出链接后失效。

 set session auto_increment_increment=5; 

  设置步长,全局有效。

set global auto_increment_increment=5;

  设置起始偏移量,全局有效。

set global auto_increment_offset=3;
  如果auto_increment_offset的值大于auto_increment_increment的值,则auto_increment_offset的值会被忽略。

外键
  外键的变种-三种关系
  多对一/一对多  需要建立两张表
    foreign key 一般建立在多条记录的一侧.
  多对多  需要建立三张表
    多对多建立的第三张表的主键为另外两张表的联合. 
  一对一  需要建立两张表