# 数据库和表操作

# 创建数据库

create database 数据库名称;

注意事项:

1)information_schema是MySQL自带的数据库,存储MySQL服务器管理的信息;
2)mysql是MySQL的系统数据库;
3)test是用户学习和测试练习使用的数据库;
4)MySQL中的数据库名称不能超过64字符,不能由纯数字组成,不能包
含:“/”、“:”、“*”、“?”、“**”**”、“<”等符号;
5)如果要创建的数据库名称已经存在,也会发生错误。(可以用”if exists 数据库名称 ”来判断是否存
在,以避免发生错误)。
如:drop database if exists student; -- 判断student数据库存在就删除
create database student; -- 重新创建student数据库
-- 创建数据库后,如果需要使用数据库,使用:”use 数据库名;”如:use student;

# 删除数据库

drop database 数据库名称;
Eg: drop database user; -- 删除了名叫 “user” 的数据库;
drop database if exists user; -- 也可以用 if exists 做判断,避免发生错误;

# 创建表

create table 表名
(
段名称1 数据类型 [ null / not null ] [ DEFAULT 默认值 ] [ AUTO_INCREMENT ]
[ PRIMARY_KEY ] [ COMMENT ‘注释内容’ ] ,
......
字段名称N 数据类型 [ null / not null ] [ DEFAULT 默认值 ] [ AUTO_INCREMENT ]
[ PRIMARY_KEY ] [ COMMENT ‘注释内容’ ]
)
Eg:
drop table if exists teacher ; -- 首先判断是否存在 teacher 表,如果存在就删除
create table teacher
(
id int not null auto_increment primary key ,
name varchar(20) not null
);
-- 创建了 teacher 表,里面有 int、 name 两个字段,其中 id 是主键,非空,自增
-- 创建数据库后,如果需要使用数据库,使用:”use 数据库名;” 如:use teacher;

# 删除表

drop table 表名;
Eg: drop table teacher;
或者删除多个表格: drop table teacher, student;

# 复制表

完全复制的格式:
create table02 select * from01;
Eg: create table teacher02 select * from teacher;
-- 复制一张和 teacher 表完全一样的 teacher02 表;
复制指定列的格式:
create table02 select 字段a,字段b,...... from01;
Eg: create table teacher02 select id, name from teacher;
-- 复制一张 teacher02 表,里面包含 teacher 表里的 id,name;
完全复制表结构(包括键key),但是不复制里面的内容,格式是:
create table02 like01;
Eg: create table teacher02 like teacher;
-- 复制一张 teacher02 表,其结构和 teacher 表相同,但没有 teacher 里的内容;

# 修改表

1)增加字段:add
Eg: alter table teacher add age int null; -- 添加 age 列,int 类型,可以为 null;
2)删除字段:drop
Eg: alter table teacher drop age; -- 删除 age 列;
3)修改字段:change
Eg: alter table teacher change name teacher_name varchar(30) not null;
-- 修改 name 列为 teacher_name,varchar 类型最大 30 个字符,不能为 null;
4)增加主键:add primary key()
Eg: alter table teacher add primary key(id); -- 设置 id 为主键(id 是已有字段);
5)修改表名:rename to
Eg: alter table teacher rename to user; -- 把 teacher 表改名为 user;

# 数据完整性

数据完整性的概念:确保数据正确性和一致性的机制。

  1. 域完整性:即列的完整性。如:年龄不能超过 150 岁,id 不能为 null。
  2. 实体完整性:即行的完整性。如:实体 “张三” 具有区别于实体 “李四” 的特征。
  3. 参照完整性:主关系表(被参照表)和从关系表(参照表)中数据的一致性。
  4. 用户定义完整性:用户根据具体需求来定义约束条件。

# 使用 SQL 语句为表创建和删除约束

如果要修改已创建的约束,最简单实用的方式就是先删除已有的约束,再建立同名的约束。

# 添加约束:

格式:alter table 表名 add [constraint] [约束名称] 约束类型(约束内容[可多个字段];

# 主键约束

主键约束: alter table user add constraint PK_user_id primary key(id);
-- 把 user 表的 id 添加主键约束,约束名称是 PK_user_id。(PK 是主键的简写)
设置联合主键的方式:
alter table user add primary key(id,name);
-- 设置了联合主键 id 和 name; 补充: 在创建表的时候也可以直接设置主键约束。

# 唯一约束

唯一约束:alter table 表名 add [constraint] unique(id);

# 默认约束

默认约束:alter table 表名 alter column列名 set DEFAULT 默认值;
-- 默认值可以为常量或者为空(null);

# 检查约束

检查约束:(与SQL Server中的检查约束有语法区别)可以使用**枚举**
Eg:create table student ( ...... sex **enum**(‘男’, ‘女’) not
null -- 学员性别 );
-- 默认值可以为常量或者为空(null);

# 外键约束

外键约束: 格式:alter table 表名 add constraint 约束名称 约束类型;
(外键约束简称为“FK”)
Eg:alter table student add constraint FK_student_class_classid foreign
key (classid) references class(classid);
-- 为 student 表所在的班级字段 classid 设置了外键约束。
创建时设置外键:
create table student ( ...... classid int not null, foreign
key(classid) references class(classid) -- 设置名称为 classid 的外键,指
向class表的classid; );

# 设置级联操作

设置级联操作:
restrictno action表示在子表有关联记录的情况下父表不能更新;
cascade 表示父表在更新或者删除时,同时更新或删除子表对应的记录;
set null 表示父表在更新或者删除时,子表对应的字段设置为null
Eg:
(1).alter table student add constraint FK_student_class_classid foreign
key (classid) references class(classid) on delete set null;
-- 如:删除 class 表中 classid=1 对应的字段时,student 表中的 classid 字段的值设置为 null
(2).alter table student add constraint FK_student_class_classid foreign
key (classid) references class(classid) on delete set cascade;
-- 如:删除 class 表中 classid=1 对应的字段时,同时删除 student 表中所有 classid=1 的该行数据。

# 删除约束

语法:alter table 表名 drop [constraint] 约束名称;
-- constraint 关键字可省略 -- 如果将表删除了,那么相关的约束也就删除了。
Eg01: alter table student drop primary key;
-- 存在一个主键约束,可用此操作;
Eg02: alter table student drop foreign key FK_class_student_id;
-- 删除外键

# 数据操作

# 插入数据:

1)”insert...values
语法:insert into 表名 values();
--(最常用)
-- 插入值的顺序必须与表中字段的顺序完全一致。
Eg01: insert into student values (1, ‘zhangsan’ );
-- 插入一行数据
Eg02: insert into student values (2,‘jack’)(3, ‘rose’);
-- 插入多行数据,用逗号隔开;
补充:当插入的记录会引发主键或唯一约束冲突时,可以用**on duplicate key update 条件
**
Eg: insert into student values (1, ‘mike’ ) **on duplicate key update id =
10**;
-- 由于 id 是主键,id=1 与上面 zhangsan 行冲突,所以自动把 zhangsan 的 id 设置为 10,然后再
把id=1的mike数据插入进去;
2)”insert...set
-- 按照每一列对应的值插入数据
语法:insert into 表名 set 列名1=1, 列名2=2,......;
Eg01: insert into student set id =5, name=’abc’;
-- 插入的数据是:id 为 5,姓名’abc’ 3)”insert...select”
-- 把从其他表查询到的数据插入到该表中,类似于 like 属性 Eg01: insert into user
select * from student;
-- 把从 student 中查询到的数据插入到 user 中;

# 更新数据

格式:
update 表名 set 列名1=1 [,列名2=2,......] [where...] [order by...]
[limit 行数]
eg: update student set name = 'wangwu' where id = 003;
-- 把 id=3 的列的 name 改为 wangwu;

# 删除数据

格式:
delete from 表名 where 列名=值;
eg:delete from student where id=3
-- 删除 id=3的列的数据。
更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

寻梦启事 微信支付

微信支付

寻梦启事 支付宝

支付宝

寻梦启事 云闪付

云闪付