Not NULL:非空
标志字段不能为空值。
CREATE TABLE test_not_null(
a VARCHAR(20),
b VARCHAR(20) NOT NULL
);
INSERT test_not_null(a,b)VALUES('','');
INSERT test_not_null(a,b)VALUES(NULL,'');
INSERT test_not_null(a,b)VALUES(NULL,NULL);
b字段是不能为空值的。在插入的时候,一定要给他一个值,且不能为空值。
非空约束。
如果在插入值的时候没有给值,有默认值的话,则使用默认值。
--测试默认值
CREATE TABLE test_default(
id INT UNSIGNED AUTO_INCREMENT KEY,
username VARCHAR(20)NOT NULL,
age TINYINT UNSIGNED DEFAULT 18,
email VARCHAR(50) NOT NULL DEFAULT '[email protected]'
);
你赋值的话,就会用你赋的值,不会使用默认值。
INSERT test_default(username)VALUES('A');
INSERT test_default(username,age,email)VALUES('B',30,'[email protected]');
INSERT test_default(username,age,email)VALUES('C',NULL,'[email protected]');
INSERT test_default(username,age,email)VALUES('D',NULL,DEFAULT);
default配合not null使用。
测试枚举类型的默认值设置:
CREATE TABLE test_default1(
id INT UNSIGNED AUTO_INCREMENT KEY,
sex ENUM('a','b','c')NOT NULL DEFAULT 'a'
);
会使用到默认值。
不能使用‘’因为值不在枚举范围内。
unique key唯一性索引,可以插入NULL并且不算重复。
一个表中可以出现多个唯一字段。
指定一个字段的唯一性。
CREATE TABLE test_unique(
id INT UNSIGNED AUTO_INCREMENT KEY,
username VARCHAR(20)NOT NULL UNIQUE key,
#我想让它是一个唯一字段
email VARCHAR(50)UNIQUE,
card CHAR(18)UNIQUE
);
INSERT test_unique(username,email,card)VALUES('A','[email protected]','1');
被标志着唯一性的字段,值不能重复。
一个表中可以有多个字段为唯一性索引。
这里的NULL值不算重复。
有了这些完整性约束条件,我们把之前的用户表重新写一下,看看真正的建表语句是什么样子的。
#用户表imooc_user
#用反引号把表名括起来,防止和MySQL关键字重复
#用comment对字段加注释,养成良好的习惯
CREATE TABLE IF NOT EXISTS `imooc_user`(
`id` INT UNSIGNED AUTO_INCREMENT KEY COMMENT '用户编号',
#可以省略unique Key的key
`username` VARCHAR(20)NOT NULL UNIQUE COMMENT '用户名',
#使用定长字符串
`password` CHAR(20) NOT NULL COMMENT '密码',
`email` VARCHAR(50) NOT NULL UNIQUE COMMENT '邮箱',
`age` TINYINT UNSIGNED NOT NULL DEFAULT 18 COMMENT '年龄',
`sex` ENUM('男','女','保密')NOT NULL DEFAULT '保密' COMMENT '性别',
#电话号是唯一的不可能重复
`tel` CHAR(11) NOT NULL UNIQUE COMMENT '电话',
`addr` VARCHAR(50) NOT NULL DEFAULT '北京' COMMENT '地址',
`card` CHAR(18) NOT NULL UNIQUE COMMENT '身份证号',
`married` TINYINT(1) NOT NULL DEFAULT 0 COMMENT'0代表未结婚,1代表已结婚',
`salary` FLOAT(8,2) NOT NULL DEFAULT 0 COMMENT '薪水'
)ENGINE=INNODB DEFAULT CHARSET=utf8;
查看表结构:
查看详细的建表信息:
married是一个bool类型。
CREATE TABLE test_bool(
id INT,
married BOOL
);
bool全称boolen。
括号里面表示的是显示字长度。
修改数据表。
动态修改表结构。
表结构操作(alter)
指定位置。
增加字段:alter table_name add 字段名称 字段属性 (完整性约束条件);
删除字段:drop 字段名称;
--测试添加和删除字段。
CREATE TABLE IF NOT EXISTS user1(
id INT UNSIGNED AUTO_INCREMENT KEY
);
--添加用户名字段。
ALTER TABLE user1 ADD username VARCHAR(20);
--添加密码字段 password char(32) not null(默认添加到所有字段之后)
ALTER TABLE user1 ADD PASSWORD CHAR(32) NOT NULL;
--添加有限字段Email varchar(50)not NULL unique加到username之后。
ALTER TABLE user1 ADD email VARCHAR(50) NOT NULL UNIQUE AFTER username;
添加测试字段test tinyint(1) not null default 0;加到首位
ALTER TABLE user1 ADD test TINYINT(1) NOT NULL DEFAULT 0 FIRST;
--删除test字段
ALTER TABLE user1 DROP test;
--一次添加多个字段,删除多个字段:
#一次选中表,完成多次操作。对性能也是有提升的。
ALTER TABLE user1
ADD age TINYINT UNSIGNED NOT NULL DEFAULT 18,
ADD addr VARCHAR(100) NOT NULL DEFAULT '北京',
ADD email VARCHAR(50) NOT NULL DEFAULT '[email protected]',
DROP eamil;