实习近半年了,关于建表,修改表字段,添加修改表约束,相对熟悉了,特此将所有操作方式总结一遍,话不多说-----> Start
1. 建表语句
create table tb_emp(
id int primary key auto_increment, --auto_increment只是MySQL特有的
Name varchar(18) not null,
sex varchar(2) null default '男', --添加默认值
age int,
address varchar(200),
email varchar(100),
primary key(id) --添加主键也可以这样写 注意此处只是提醒所用,此方式和上面方式只能存在一个
);
drop table tb_dept; --删除表
2.修改列类型(重要)
tips:修改前要保证该字段的数据都为空
#只有当字段只包含空值时才可以修改。
alter table tb_emp modify sex varchar(4);
#增加列
alter table tb_emp add tel varchar(12);
#删除列
alter table tb_emp drop tel;
alter table tb_emp drop column tel;
#列改名
alter table tb_emp change Name emp_Name varchar(18);
#更改表名1
alter table tb_emp rename emp;
#更改表名2
rename table emp to tb_emp;
#插入数据
insert into dept_emp (Name,sex,age,address,email)values('','','','','');
3.表约束相关操作(重要,项目中用的少但还是会用,导致每次用都要去找,建议记熟)
就我而言接触的所有约束(比较全面)
1.非空约束(not null)
添加非空约束
1)建表时直接添加
CREATE TABLE t_user(user_id INT(10) NOT NULL);
2)通过ALTER 语句
ALTER TABLE t_user MODIFY user_id INT(10) NOT NULL;
ALTER TABLE t_user CHANGE user_id user_id INT(10) NOT NULL;
删除非空约束 --删除倒是需要多注意下
1)ALTER TABLE t_user MODIFY user_id INT(10);
2)ALTER TABLE t_user CHANGE user_id user_id INT(10);
2.主键约束(primary key------2种方法添加
添加主键约束
1)建表时直接添加
CREATE TABLE t_user(user_id INT(10) PRIMARY KEY);
CREATE TABLE t_user(
user_id INT(10),
user_name VARCHAR(30),
CONSTRAINT PK_ID_NAME PRIMARY KEY(user_id,user_name)#复合约束
);
CREATE TABLE t_user(
user_id INT(10),
PRIMARY KEY(user_id)
);
2)通过ALTER语句
ALTER TABLE t_user MODIFY user_id INT(10) PRIMARY KEY;
ALTER TABLE t_user CHANGE user_id user_id INT(10) PRIMARY KEY;
ALTER TABLE t_user ADD PRIMARY KEY(user_id);
ALTER TABLE t_user ADD CONSTRAINT PK_ID PRIMARY KEY(user_id);
tips:删除主键约束前,如果有自增长需要先删除自增长,如果不删除自增长就无法删除主键约束
删除主键约束
1)ALTER TABLE t_user DROP PRIMARY KEY;
注:主键约束相当于(唯一约束+非空约束)
3.外键约束(foreign key)
tips:外键约束将从表的某个字段和另一张主表的字段(外键的字段在另一个表中不能重复且字段类型和长度必须相同)关联,保证数据的完整性和一致性
- 添加外键约束
首先创建两张表:class,students
主表:
CREATE TABLE class(
cla_id INT(6) AUTO_INCREMENT PRIMARY KEY,
cla_name VARCHAR(30) NOT NULL UNIQUE
);
从表:
CREATE TABLE students(
stu_id INT(10) AUTO_INCREMENT PRIMARY KEY,
stu_name VARCHAR(30) NOT NULL,
stu_score FLOAT(5,2) DEFAULT 0.0,
cla_id INT(10),
CONSTRAINT FK_CLA_ID FOREIGN KEY(cla_id) REFERENCES class(cla_id)#添加外键约束
);
第二种方式:
ALTER TABLE students ADD CONSTRAINT FK_CLA_ID FROEIGN KEY(cla_id) REFERENCES class(cla_id);
- 删除外键约束
删除外键约束
ALTER TABLE students DROP FOREIGN KEY FK_CLA_ID;
- 外键约束的级联关系
ON DELETE CASCADE 删除主表中的数据时,从表中的数据随之删除
ON UPDATE CASCADE 更新主表中的数据时,从表中的数据随之更新
ON DELETE SET NULL 删除主表中的数据时,从表中的数据置为空
默认 删除主表中的数据前需先删除从表中的数据,否则主表数据不会被删除
--更改级联关系如下
CREATE TABLE students(
stu_id INT(10) AUTO_INCREMENT PRIMARY KEY,
stu_name VARCHAR(30) NOT NULL,
stu_score FLOAT(5,2) DEFAULT 0.0,
cla_id INT(10),
CONSTRAINT FK_CLA_ID FOREIGN KEY(cla_id) REFERENCES class(cla_id) ON DELETE SET NULL
);
原文链接:https://blog.csdn.net/a909301740/article/details/62887992
4检查约束.约束(check())
tips:mysql中可没有check哟,但是用了不会报错,只是没有效果
CREATE TABLE class(
cla_id INT(6) AUTO_INCREMENT PRIMARY KEY,
cla_name VARCHAR(30) NOT NULL UNIQUE,
CHECK(cla_id>0)
);
5.唯一约束(unique)唯一键和主键的一个区别是:唯一键允许为空,但是主键不能为空!
其他
一、AUTO_INCREMENT(自增长)
tips:一张表只能有一个自增长列,并且该列必须定义了约束(可以是主键约束,也可以是唯一约束,也可以是外键约束,但是不可以是非空和检查约束)
不过自增长一般配合主键使用,并且只能在数字类型中使用
- 添加自增长
1)在创建表的时候添加
CREATE TABLE t_user(user_id INT(10) AUTO_INCREMENT PRIMARY KEY);
2)通过ALTER语句
ALTER TABLE t_user MODIFY user_id INT(10) AUTO_INCREMENT;
ALTER TABLE t_user CHANGE user_id user_id INT(10) AUTO_INCREMENT;
- 删除自增长
ALTER TABLE t_user MODIFY user_id INT(10);
ALTER TABLE t_user CHANGE user_id user_id INT(10);
二.ZEROFILL(零填充)
tips:零填充是当数据未达到数据类型定义的长度时,会将通过填充零达到所定义长度,比如某字段数据类型为INT(5),而插入的值为2,那么零填充会显示00002
但是,这个效果在Navicat for MySQL中显示不出来,只有在DOS窗口下才能显示
- 添加零填充
1)在创建表的时候添加
CREATE TABLE t_user(user_id INT(10) ZEROFILL);
2)通过ALTER语句
ALTER TABLE t_user MODIFY user_id INT(10) ZEROFILL;
ALTER TABLE t_user CHANGE user_id user_id INT(10) ZEROFILL;
删除零填充
ALTER TABLE t_user MODIFY user_id INT(10);
ALTER TABLE t_user CHANGE user_id user_id INT(10);
三.DEFAULT(默认)
添加默认约束
1)在创建表的时候添加
CREATE TABLE t_user(user_id INT(10) DEFAULT 3);
2)通过ALTER语句
ALTER TABLE t_user MODIFY user_id INT(10) DEFAULT 2;
ALTER TABLE t_user CHANGE user_id user_id INT(10) DEFAULT 2;
删除默认约束
ALTER TABLE t_user MODIFY user_id INT(10);
ALTER TABLE t_user CHANGE user_id user_id INT(10);
四.UNSIGNED(无符号位)
tips:无符号作用于数值类型,就是将数字类型无符号化, 例如 int 型的范围:-2^31 ~ 2^31 - 1,而unsigned int的范围:0 ~ 2^32。
添加无符号
1)在创建表的时候添加
CREATE TABLE t_user(user_id INT(10) UNSIGNED);
2)通过ALTER语句
ALTER TABLE t_user MODIFY user_id INT(10) UNSIGNED;
ALTER TABLE t_user CHANGE user_id user_id INT(10) UNSIGNED;
删除无符号
ALTER TABLE t_user MODIFY user_id INT(10);
ALTER TABLE t_user CHANGE user_id user_id INT(10);
index(表索引)
- 普通索引
CREATE TABLE index1 (id INT ,
name VARCHAR(20) ,
sex BOOLEAN ,
INDEX ( id) --此处建普通索引 自动生成名称 表名_字段名
);
第二种方式
ALTER TABLE `sj_projects` ADD UNIQUE `unique_id` (`unique_id`); -- 唯一索引
ALTER TABLE `sj_projects` ADD INDEX `unique_id` (`unique_id`); -- 普通索引
ALTER TABLE `sj_projects` ADD INDEX `uniqueId` (`unique_id`); -- 普通索引可以修改名字
第三种方式
CREATE INDEX indexName ON mytable(username(length))
删除索引
ALTER TABLE testalter_tbl DROP INDEX (c);
- 唯一索引
建表时创建
CREATE TABLE `sj_projects` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(255) NOT NULL DEFAULT '' COMMENT '项目名称',
`platform_id` int(11) NOT NULL DEFAULT '0' COMMENT '平台id',
`term` varchar(50) NOT NULL DEFAULT '' COMMENT '期限',
`type` int(11) NOT NULL DEFAULT '0',
`PageUrl` text COMMENT '注意大小写PageUrl',
`insert_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '添加时间',
`orderby_id` int(11) NOT NULL DEFAULT '1' COMMENT '排序',
`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态 0为关闭,1为开启',
PRIMARY KEY (`id`),
KEY `unique_id` (`unique_id`) USING BTREE --此处为唯一索引
) ENGINE=InnoDB AUTO_INCREMENT=2383 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='项目表';
第二种方式
ALTER TABLE `sj_projects` ADD UNIQUE `unique_id` (`unique_id`); -- 唯一索引
ALTER TABLE `sj_projects` ADD INDEX `unique_id` (`unique_id`); -- 普通索引
ALTER TABLE `sj_projects` ADD INDEX `uniqueId` (`unique_id`); -- 普通索引可以修改名字
第三种方式
CREATE UNIQUE INDEX indexName ON mytable(username(length))
删除索引
ALTER TABLE testalter_tbl DROP INDEX (c);
- 全文索引
CREATE TABLE index3 (
id INT ,
info VARCHAR(20) ,
FULLTEXT INDEX index3_info ( info )
)ENGINE=MyISAM;
删除索引
ALTER TABLE testalter_tbl DROP INDEX (c);
从查询information_schema中查询指定表中的约束
USE INFORMATION_SCHEMA;
SELECT CONSTRAINT_NAME FROM TABLE_CONSTRAINTS WHERE TABLE_NAME='student';