一、对库的管理
1.创建一个库:
CREATE DATABASE IF NOT EXISTS student;#student是库的名字
2.对于库的修改,一般是不修改库的名字,因为修改库的名字可能会导致库的数据丢失(如果非要修改的话,先关闭服务器,在然后再此电脑里面找该版本的date直接修改文件的名字,
这时候直接重命名就行了,然后再打开服务器),可以该的有库的字符集:
ALTER DATABASE student CHARACTER SET gbk;#这个是把字符集修改为gbk
ALTER DATABASE student CHARACTER SET utf8;#这个是把字符集修改为utf8
3.库的删除
例:
DROP DATABASE IF EXISTS student;
4.修改字符集
ALTER DATABASE student CHARACTER SET gbk;
ALTER DATABASE student CHARACTER SET utf8;
第一条指令是修改为gbk,第二条指定是修改为utf8
二、对表的管理
1.修改列名
例
ALTER TABLE book CHANGE COLUMN book_name book_Name VARCHAR(20);
其中book是表名,book_name是列名,book_Name是修该后的名字,VARCHAR(20)是列的类型,其他的都是通用的格式
2.修改列的类型或者说是约束
例:
ALTER TABLE book MODIFY COLUMN book_Name INT;
book还是表名,MODIFY是修改列名的关键字,book_Name是列名,后面的类型名就是想要修改成的类型名字
3.添加一个新的列
例:
ALTER TABLE book ADD COLUMN book_id INT;
book是表名,ADD是添加列的关键字,book_id是添加列的名称,后面跟的int是新添加的列的类型
4.删除列名
例:
ALTER TABLE book DROP COLUMN book_id;
book是列名,DROP是删除表的关键字,book_id是列名,这样就可以删除列
5.修改表名
例:
ALTER TABLE book RENAME TO books;
book是表名,RENAME是修改表名的关键字后面跟 TO表示想要修改成什么样的名字books是新的表名
6.删除表
例:
DROP table IF EXISTS aaa;
里面的if exists的意思是是否存在 判断表aaa是否存在,如果不存在就不执行,存在就会删除,防止程序报错
三、复制表
1.复制表的结构
CREATE TABLE aaa LIKE book;
这样就会创建一个和book结构一样的表aaa
2.复制表的结构和数据
(1)、复制的是全部的数据
例:
CREATE TABLE aaa SELECT * FROM book;
创建一个表aaa,表aaa的就够和book的结构一样,里面的数据也一样,就相当于把book里面的数据粘贴复制到aaa中一样。
(2)、复制部分结构和数据
例:
CREATE TABLE aaa SELECT book_Name FROM book;
这个复制的是表book中的book_name的数据,其中结构也是只有book_name这一列
(3)、仅仅复制表中的结构不复制数据
例:
CREATE TABLE aaa SELECT book_Name FROM book WHERE 1=2;
1=2表示不成立,即旧表中的数据都不符合要求,最后值得到了表的结构
(4)、复制表的数据到新表(信标是建好的,并且和旧表的结构一样)
INSERT INTO 新表 SELECT * FROM 旧表
四、对列的管理
1.对数据的管理(删除)
(1)、删除表中的数据,但是不改变表的结构,只是单纯的删除表里面的东西
单表删除:
delete from 表1 where 筛选条件
加了筛选条件后就是删除的筛选出来的数据,如果说时学生管理的话,就是删除学生的学号、姓名、年龄等等,与这个人相关的信息全部删除,不影响其他的
多表删除truncate
truncate table 表名
在sql92中
delete 表1的别名,表2的别名 (如果想要删除表1的数据就写表1的别名,想要删表2的就写表2的别 名,都删就都写)
from 表1 别名,表2 别名
where 连接条件
and 筛选条件
在sql99中
delete 表1的别名,表2的别名 #如果想要删除表1的数据就写表1的别名,想要删表2的就写表2的别名,都删就都写
from 表1别名 inner/left/right join 表2别名 on连接条件
where 筛选条件
1.delete可以加where语句,truncate不能加where语句
2.truncate是删除全部数据,当删除全部数据是,truncate的效率高
3.假如删除的表中有自增长列,
如果用delete删除后,再加入数据,自增长列的值会从断点(即继续连接上一次的值开始增加)处开始
如果使用truncate删除后,再加入数据,自增长列的值从1开始
4.truncate删除没有返回值,delete删除有返回值
5.truncate删除不能回滚,delete删除可以回滚(应该是可以撤回的意思)
2.对列的管理
表级约束和列级约束的区别:
(那个表格我也没弄好,就截了个图)
CREATE DATABASE test1;
CREATE TABLE test1_1(
id INT NOT NULL PRIMARY KEY,#主键
NAME VARCHAR(20) NOT NULL,
seat INT UNIQUE,
age INT DEFAULT 18
);
查看表结构的详细信息
DESC test1_1;
添加数据
INSERT INTO test1_1 VALUES(1,'大牙',1,19);
INSERT INTO test1_1 (id,NAME,seat) VALUES(2,'张三',2);
查看表的全部数据
SELECT * FROM test1_1;
查看具有唯一性的列
SHOW INDEX FROM test1_1;
删除表
DROP TABLE IF EXISTS test1_1;
CREATE TABLE test1_1(
id INT NOT NULL ,
NAME VARCHAR(20) NOT NULL,
seat INT,
age INT DEFAULT 18
);
删除表
DESC test1_1;
修改约束条件
ALTER TABLE test1_1 MODIFY COLUMN NAME VARCHAR(15) NOT NULL;
#修改默认约束
ALTER TABLE test1_1 MODIFY COLUMN age INT DEFAULT 19;
#添加主键
#1.列级约束
ALTER TABLE test1_1 MODIFY COLUMN id INT NOT NULL PRIMARY KEY;
#2.表级约束
ALTER TABLE test1_1 ADD PRIMARY KEY(id);
#添加唯一
#1.列级约束
ALTER TABLE test1_1 MODIFY COLUMN seat INT UNIQUE;
#2.表级约束
ALTER TABLE test1_1 ADD UNIQUE(seat);
#添加外键(emp5是主表,test1_1是从表)
#alter table 表名 add【constraint 约束名】约束类型(字段名) 【外键的引用】
ALTER TABLE test1_1 ADD CONSTRAINT test1_1_age FOREIGN KEY(age) REFERENCES test.emp5(employee_id);
#三、修改表时的删除约束
1、删除非空约束
ALTER TABLE test1_1 MODIFY COLUMN NAME VARCHAR(20);
2、删除默认约束
ALTER TABLE test1_1 MODIFY COLUMN age INT;
3、删除主键
ALTER TABLE test1_1 DROP PRIMARY KEY;
4、删除唯一键
ALTER TABLE test1_1 DROP INDEX seat;
5、删除外键
ALTER TABLE test1_1 DROP FOREIGN KEY test1_1_age;
#向emp2中的id列添加primary key约束
CREATE TABLE emp2(
id INT
);
ALTER TABLE emp2 ADD PRIMARY KEY(id);
DESC emp2;
#向表dept2的id列中添加primary key约束
CREATE TABLE dept2(
id INT PRIMARY KEY
);
#向表emp2中添加列dept_id,并在其中定义foreign key约束,
#与其相关的列时dept2表中的id列
ALTER TABLE emp2 ADD COLUMN dept_id INT;
ALTER TABLE emp2 ADD CONSTRAINT dept2_emp2_id FOREIGN KEY(dept_id) REFERENCES dept2(id);
DESC emp2;
标识列
#设置标识列
/*
特点
1、标识列必须和一个键搭配
2、一个表中只能有一个标识列
3、标识列的搭配类型必须是数值型
4、可以修改标识列的自增长量SET auto_increment_increment=3;
*/
DROP TABLE IF EXISTS test1_2;
CREATE TABLE test1_2(
id INT,
NAME VARCHAR(20)
);
#删除表中的数据
TRUNCATE TABLE test1_2;
#向表中添加数据
#不用写入id,直接写入name,id会自动填充,每次加1(也可以改变首个id的值)
INSERT INTO test1_2 VALUES(NULL,'张三');
#因为不写列的话,会自动填充列,又要保持列和我们所写的值的数量保持一致
#如果不想要写id那么就需要自己写不包含id的列
INSERT INTO test1_2 (NAME) VALUES('张三');
#遍历数据
SELECT * FROM test1_2;
#运行下面的会出现自增长的量(每次增加的差值,默认为1)
SHOW VARIABLES LIKE '%auto_increment%';
#可以设置自增长量的值
SET auto_increment_increment=3;
SET auto_increment_increment=1;
#修改表时设置表示列
ALTER TABLE test1_2 MODIFY COLUMN id INT PRIMARY KEY AUTO_INCREMENT;
#删除标识列
ALTER TABLE test1_2 MODIFY COLUMN id INT;