-
事物---功能---用途---实现条件---实现步骤/操作步骤(注意事项)---问题---解决
-
今天学了什么
-
对已经创建的表进行添加、修改、删除、约束操作、数据类型、ddl语句、约束
-
-
DDL语句DDL(Data Definition Languages)语句: 数据定义语言,这些语句定义了不同的数据段、数据库、表、列、索引等数据库对象的定义。 常用的语句关键字主要包括 create、drop、alter等。
-
库的管理
-
语法
-
创建库
-
CREATE DATABASE dbname;
-
-
查看已经存在的数据库
-
SHOW DATABASES;
-
-
显示数据库创建语句
-
SHOW CREATE DATABASE db_name;
-
-
选择数据库
-
USE dbname;
-
-
查看数据库中的表
-
SHOW TABLES;
-
-
删除数据库
-
DROP DATABASE [IF EXISTS] dbname;IF EXISTS判断是否存在而删除
-
-
建立一个数据库并制定编码格式
-
create database 数据库名 default charset utf8 collate utf8_general_ci;
-
-
-
修改、备份、恢复数据库
-
备份
-
mysqldump -u 用户名 -p 数据库名 > 导出的文件名
-
-
导入
-
mysql>source 导入的文件名;
-
-
-
-
表的管理
-
创建表
-
CREATE TABLE IF NOT EXISTS stuinfo( stuId INT, stuName VARCHAR(20), gender CHAR, bornDate DATETIME );
-
-
修改表
-
ALTER TABLE 表名 ADD|MODIFY|DROP|CHANGE COLUMN 字段名 【字段类型】;
-
添加新列及其定义放在ADD COLUMN子句之后。 请注意,COLUMN关键字是可选的,因此可以省略它。
-
-
修改字段名
-
ALTER TABLE studentinfo CHANGE COLUMN sex gender CHAR;
-
-
修改表名
-
ALTER TABLE stuinfo RENAME [TO] studentinfo;
- TO 为可选参数,使用与否均不影响结果。
-
-
修改表的字符集
-
altertable student character set utf8;
-
-
修改字段类型和列级约束
-
ALTER TABLE studentinfo MODIFY COLUMN borndate DATE ;
-
-
添加字段
-
ALTER TABLE studentinfo ADD COLUMN email VARCHAR(20) first;
-
-
给表添加注释
-
ALTER TABLE `mydb1`.`employees` COMMENT='员工表';
-
`mydb1`.`employees`:这个可以用鼠标点2下数据库然后’.‘调用出表名
-
-
-
删除字段
-
ALTER TABLE studentinfo DROP COLUMN email;
-
-
删除表
-
DROP TABLE [IF EXISTS] studentinfo;
-
-
查看表结构(以表格形式展示表结构)
-
DESCRIBE <表名>;
-
-
以SQL语句的形式展示表结构
-
SHOW CREATE TABLE <表名>;
-
-
-
注意事项
-
创建表时,要根据需保存的数据创建相应的列,并根据数据的类型定义相应的列类型。例:user对象
-
添加新列及其定义放在ADD COLUMN子句之后。 请注意,COLUMN关键字是可选的,因此可以省略它。
-
第三,MySQL允许通过指定FIRST关键字将新列添加到表的第一列。 它还允许您使用AFTER existing_column子句在现有列之后添加新列。如果没有明确指定新列的位置,MySQL会将其添加为最后一列。
-
-
约束
-
常见约束
-
NOT NULL
-
非空,用于保证该字段的值不能为空。例如学生表的学生姓名及学号等等。
-
-
DEFAULT
-
默认值,用于保证该字段有默认值。例如学生表的学生性别。
-
-
UNIQUE
-
唯一,用于保证该字段的值具有唯一性,可以为空。例如注册用户的手机号,身份证号等。
-
-
CHECK
-
检查约束(MySql不支持),检查字段的值是否为指定的值。
-
-
PRIMARY KEY
-
主键,用于保证该字段的值具有唯一性并且非空。例如学生表的学生学号等。
-
-
FOREIGN KEY
-
外键,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值,在从表添加外键约束,用于引用主表中某些的值。例如学生表的专业编号
-
-
-
列级约束
-
作用在一个列上
-
定义方式:列约束必须跟在列的定义里后面
-
-
表级约束除了非空、默认其他都支持
-
可以作用在多个列,也可以作用在一个列
-
定义方式:表约束不与列一起,而是单独定义。
-
-
实现步骤
-
创建表时添加约束
-
表级约束
语法: 在各个字段的最下面 CONSTRAINT 约束名 约束类型(字段名) DROP TABLE IF EXISTS stuinfo; CREATE TABLE stuinfo( id INT, stuname VARCHAR(20), sex CHAR(1), seat INT, age INT, majorid INT, # 约束 CONSTRAINT ys PRIMARY KEY(id),# 主键 CONSTRAINT uq UNIQUE(seat),# 唯一键 CONSTRAINT ck CHECK(sex='男'OR sex='女'),# 检查 CONSTRAINT fk FOREIGN KEY(majorid) REFERENCES major(id)# 外键 );
-
列级约束
语法: 直接在字段名和类型后面追加约束类型即可 mysql只支持:默认、非空、主键、唯一 USE students; CREATE TABLE stuinfo( id INT PRIMARY KEY,#主键 stuName VARCHAR(20) NOT NULL,#姓名 sex CHAR(1) CHECK(sex='男'OR sex='女'), #性别 seat INT UNIQUE,#唯一 age INT DEFAULT 19,#默认约束 majorID INT /foreign key/ REFERENCES marjor(id)#外键 ); CREATE TABLE major( id INT PRIMARY KEY, majorName VARCHAR(20) )
-
-
修改表时
-
添加列级约束
-
alter table 表名 modify column 字段名 字段类型 新约束
-
-
添加表级约束
-
alter table 表名 add [ constraint 约束名] 约束类型 (字段名) [外键的引用]
-
-
添加约束
USE students; DROP TABLE IF EXISTS stuinfo; CREATE TABLE stuinfo( id INT, stuname VARCHAR(20), sex CHAR(1), seat INT, age INT, majorid INT ) DESC stuinfo; 1.添加非空约束 ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) NOT NULL; #约束 CONSTRAINT ys PRIMARY KEY(id),#主键 CONSTRAINT uq UNIQUE(seat),#唯一键 CONSTRAINT ck CHECK(sex='男'OR sex='女'),#检查 CONSTRAINT fk FOREIGN KEY(majorid) REFERENCES major(id)#外键,references指向主键 2.添加默认约束 ALTER TABLE stuinfo MODIFY COLUMN age INT DEFAULT 18; 3.添加主键 #列级约束 ALTER TABLE stuinfo MODIFY COLUMN id INT PRIMARY KEY; #表级约束 ALTER TABLE stuinfo ADD PRIMARY KEY(id); 4.添加唯一键 #列级约束 ALTER TABLE stuinfo MODIFY COLUMN seat INT UNIQUE; #表级约束 ALTER TABLE stuinfo ADD UNIQUE(seat); 5.添加外键
ALTER TABLE stuinfo ADD CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id); -
删除约束
#1.删除非空约束 ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) NULL; #2.删除默认约束 ALTER TABLE stuinfo MODIFY COLUMN age INT; #3.删除主键 ALTER TBALE stuinfo DROP PRIMARY KEY; #4.删除唯一 ALTER TABLE stuinfo DROP INDEX seat; #5.删除外键 ALTER TABLE stuinfo DROP FOREIGN KEY fk_stuinfo_major; SHOW INDEX FROM stuinfo;
-
-
-
-
注意事项
-
在什么时候创建约束:创建表时;修改表时;约束的添加分类。
-
非空的约束只能定义在列上
-
请注意,COLUMN关键字是可选的,因此可以省略它。
-
-
1.查询约束: SELECT * FROM information_schema.`TABLE_CONSTRAINTS`;(可以通过where table_name=‘student‘来约定只查询某个表的约束)其实每次添加约束都是将添加的约束的信息存储到了information_schema这个schema的table_constraints表里;(mysql里``和bash的很像,也是执行``内的表达式而不是将里面作为字符串使用)
-
2.查看所有的触发器:select* from information_schema.triggers;
-
-
外键
-
用于限制两个表的关系,从表的字段值引用了主表的某字段值,外键列和主表的被引用列要求类型一致,意义一样,名称无要求;主表的被引用列要求是一个key (一般就是主键); 插入数据,先插入主表删除数据,先删除从表
-
-
数据类型
-
主要包括以下五大类
-
整数类型:BIT、BOOL、TINY INT、SMALL INT、MEDIUM INT、 INT、 BIG INT
-
浮点数类型:FLOAT、DOUBLE、DECIMAL
-
字符串类型:CHAR、VARCHAR、TINY TEXT、TEXT、MEDIUM TEXT、LONGTEXT、TINY BLOB、BLOB、MEDIUM BLOB、LONG BLOB
-
日期类型:Date、DateTime、TimeStamp、Time、Year
-
其他数据类型:BINARY、VARBINARY、ENUM、SET、Geometry、Point、MultiPoint、LineString、MultiLineString、Polygon、GeometryCollection等
-
-
具体看 这个去吧(菜鸟教程)
-
代码练习:
#选择到star数据库 USE star; #创建一个student表 CREATE TABLE student( #定义id为int类型并设置主键 id INT PRIMARY KEY, #定义name为varchar类型,位数为50,不能为空】 NAME VARCHAR(50) NOT NULL, #定义age为int类型,位数为3 age INT(3), #定义address为varchar类型,位数100 address VARCHAR(100), #定义birth为datetime类型 birth DATETIME )#设置储存引擎,设置编码格式 ENGINE=INNODB DEFAULT CHARSET=utf8; #查询一个刚才创建的表 select * from 表名; SELECT * FROM student; #修改表名 rename table 表名 to 修改的表名; RENAME TABLE student TO sys_student; #查询修改后的表名看修改成功没 SELECT * FROM sys_student;#修改成功 #alter:对已经创建的表进行添加、修改、删除、约束操作 #增加列 语法:alter table 表名 add 列名 数据类型; ALTER TABLE sys_student ADD sex CHAR(2); #修改列 语法:alter table 表名 modify 要修改的列名 修改的数据类型; ALTER TABLE sys_student MODIFY address VARCHAR(150) NOT NULL; #删除列 语法:alter table 表名 drop 要删除的列名 ALTER TABLE sys_student DROP sex; #查询下表看删除了没有 SELECT * FROM sys_student;#sex列已经被删除了 SELECT * FROM employees; #创建员工表,并添加外键约束 CREATE TABLE employees( employee_id INT, first_name VARCHAR(50), job_id VARCHAR(50) NOT NULL, #定义一个salary,类型为double salary DOUBLE, dept_id INT, /* 约束英文:constraint 约束实际上就是表中数据的限制条件 表级约束可以给约束起名字(方便以后通过这个名字来删除这个约束) 在定义完所有列之后指定主键,语法:constraint 约束的名字 约束类型 (作用列名)*/ #emp_id_pk是约束名字,employee_id是约束的列,primary key:主键约束 CONSTRAINT emp_id_pk PRIMARY KEY(employee_id), /*MySQL提供了另一种称为UNIQUE索引的索引,它允许您在一个或多个列中强制实现值的唯一性。与PRIMARY KEY索引不同,每个表可以有多个UNIQUE索引。 */ #给first_name列约束值唯一 CONSTRAINT emp_first_name_uk UNIQUE(first_name), /*CHECK <表达式> “表达式”指的就是 SQL 表达式,用于指定需要检查的限定条件。 注意:若将CHECK约束子句置于所有列的定义以及主键约束和外键定义之后,则这种约束也称为基于表的 CHECK 约束。该约束可以同时对表中多个列设置限定条件。*/ #给salary约束值不能为负数 CONSTRAINT emp_salary_min CHECK(salary>0), /*REFERENCES对象权限。 建立外键关系权限。 用户要在tb1上建立外键,外键指向tb2,那么该用户必须在tb2上有REFERENCES权限。 外键首先是表中的一个字段,它可以不是本表的主键 但对应另外一个表的主键! 主表与从表:若同一个数据库中,b表的外键与a表的主键相对应,则a表为主表,b表为从表 */ #创建外键的语法: [constraint<外键名>] FOREIGN KEY 字段1[,字段名2,...] #references<主键名> 主键列1[,主键列2,...] #外键名 为定义外键约束的名称;字段名 表示子表需要添加外键约束的子段列 #给dept_id列添加外键并和主键建立关系,用references建立 CONSTRAINT emp_dept_fk FOREIGN KEY (dept_id)REFERENCES department(dept_id) ) #创建主表 CREATE TABLE department( dept_id INT, dept_name VARCHAR(50), #在定义完所有列之后指定主键,语法:[constraint<约束名>] primary key[字段名] CONSTRAINT dept_name_uk PRIMARY KEY(dept_id), #用给(约束)给dept_name列约束唯一(UNIQUE) CONSTRAINT dept_name_uk UNIQUE(dept_name) ) SELECT *FROM employees; SELECT * FROM department; #delete删除 where条件 语法:delete from 表名 where 条件 #从employees表中删除employee_id 为1的行 DELETE FROM employees WHERE employee_id=1; DELETE FROM employees WHERE salary; #alter:对已经创建的表进行添加(add)、修改(modify)、删除(drop)、约束操作 SELECT * FROM employees; #增加一个salary列,类型double ALTER TABLE employees ADD salary DOUBLE; #删除empoyees下的salary列 ALTER TABLE employees DROP salary; #修改salary列类型为int not null ALTER TABLE employees MODIFY salary INT NOT NULL; #在department表里添加dept_count列并设置类型为int ALTER TABLE department ADD dept_count INT; #添加约束: ALTER TABLE <表名> ADD <列定义>|<完整性约束>。 #由于使用此方式中 增加的新列 自动填充null值,所以不能为增加的新列指定not null约束。 #约束唯一 constraint 约束名 约束(字段名) ALTER TABLE department ADD CONSTRAINT dept_count_uk UNIQUE(dept_count); #添加外键为department表里的字段,并和department里的主键(dept_id)建立联系 ALTER TABLE employees ADD CONSTRAINT emp_dept_fk FOREIGN KEY(dept_id)REFERENCES department(dept_id); SELECT #删除外键约束名 ALTER TABLE employees DROP FOREIGN KEY emp_dept_fk; #删除外键约束列 ALTER TABLE employees DROP dept_id; SHOW CREATE TABLE employees;#show create table 表名:查看表的详细信息, SHOW CREATE TABLE department; #以表格形式展现结构:DESCRIBE <表名>; DESCRIBE department; DESCRIBE employees; #查询约束:SELECT * FROM information_schema.`TABLE_CONSTRAINTS`;(可以通过where table_name=‘student‘来约定只查询某个表的约束) #其实每次添加约束都是将添加的约束的信息存储到了information_schema这个schema的table_constraints表里;(mysql里``和bash的很像,也是执行``内的表达式而不是将里面作为字符串使用) #查询定义约束的列 SELECT * FROM information_schema.`TABLE_CONSTRAINTS` WHERE TABLE_NAME='employees'; #查询定义约束的列 SELECT COLUMN_NAME, CONSTRAINT_NAME, REFERENCED_COLUMN_NAME, REFERENCED_TABLE_NAME FROM information_schema.KEY_COLUMN_USAGE WHERE TABLE_NAME = 'EMPLOYEES';