DROP TABLE IF EXISTS stuinfo;
CREATE TABLE IF NOT EXISTS stuinfo (
id INT,
stuName VARCHAR ( 20 ),
gender CHAR ( 1 ),
seat INT,
Age INT,
majorid INT,
PRIMARY KEY(id,stuName),
UNIQUE(seat),
check(gender='男'or gender='女'),
FOREIGN KEY ( majorid ) REFERENCES major ( id )
结果显示 id 和stuName 都是主键,两个字段一摸一样时不能插入数据。保证两个字段的组合是唯一的。
https://www.bilibili.com/video/BV12b411K7Zu?p=128
常见约束含义:一种限制,用于限制表中的数据,为了保证表中数据的准确和可靠性。分类- 六大约束:not null 非空, 用于保障该字段的值不能为空, 比如姓名、学号等Default: 默认,用于保证该字段有默认值,比如性别、PRIMARY KEY 主键: 用于保证该字段的值有唯一性,并且***非空***。是能够唯一的标识一组数据的数据元素;比如说:学号,姓名,年龄,性别,课程号课程中学号是唯一的UNIQUE: 唯一约束: 用于保障该字段的值有唯一性,可以为空, 比如座位号Check 检查约束
FOREIGN KEY
外键,用于限制两表的关系,用于保证该字段的值必须来自主表的关联列的值;在从表添加外键约束,用于引用主表中某列的值;主表的关联列必须是一个key(一般是主键或唯一);插入数据,先插从表,再主表,删除时先删从表,再删主表
主键和唯一的对比:
主键是唯一且非空,唯一是允许为空;个表只能有一个主键,但可以有很多个唯一键;主键和唯一键都允许组合,但是不推荐
添加约束
时机:创建或修改表时
列级约束:直接在字段名和类型后加,只支持默认、非空、主键、唯一
约束保证数据的完整性和一致性
约束分为表级约束和列级约束
约束类型包括:NOT NULL (非空约束),PRIMARY KEY(主键约束),UNIQUE KEY(唯一约束),DEFAULT(默认约束),FOREIGN(外键约束)
1.主键约束
PRIMARY KEY
每张数据表只能存在一个主键
主键保证记录的唯一性,主键的值不重复
主键自动为 NOT NULL
举例,创建一张student表,将学号设置为主键创建完表之后,通过SHWO COLUMNS FROM student查看表结构
CREATE TABLE student(
id int PRIM
写在前面: 关于Mysql的学习笔记,我是观看了https://www.bilibili.com/video/BV1Vt411z7wy?p=27
的视频,以及参考了这位大佬的学习笔记;
Mysql速成
文章目录Mysql速成使用终端操作数据库Mysql基本操作Mysql常用数据类型数值类型日期和时间类型字符串类型Mysql建表的约束主键约束复合主键自增约束唯一约束非空约束:默认约束外键约束如何建表之后添加主键约束Mysql的三大设计范式第一范式第二范式第三范式
使用终端操作数据库
Mysql基本操作
使用登录Mysql服务器
在命令行输入
mysql -u root -p
Enter pas
select * from table where id != null;
select * from table where id <> null;
select * from table where not id = '';
容易查不出来
使用is not null
select * from table where id is not null
约束(Constraint)是为了保证表中数据的完整性,合法性以及有效性。例如注册账户的时候有各式各样的格式,规定和要求。
非空约束(not null):指这个数据必须填写,不能为null
唯一性约束(unique):这个字段的是不能重复的
主键约束(primary key):既不能为null也不能重复
外键约束(foreign key):
检查约束(check)(mysql不支持,但是Oracle有):
一般usename(唯一性约束) password(非空约束)
非空约束 not null
--建库之前先建路径的代码
exec xp_cmdshell'mkdir d:\mydata', --也可以用exec xp_cmdshell'md d:\mydata'
no_output
exec xp_cmdshell'rd d:\mydata' --删除目录
--查看先前建的文件夹是否成功创建
exec xp_cmdshell'dir d:\'
----------------------------------------------------------------------------------------------------------------
/*切换数据库*/
use master
/*开启master表来判断要新建的数据库是否已经存在*/
if exists (select * from sysdatabases where name='stuDB')
/*存在就先删除*/
drop database stuDB
/*创建数据库*/
create database stuDB
/*创建主数据库文件*/
on primary
name='stuDB_data_1', --数据库逻辑名
filename='d:\mydata\stuDB_data_1.mdf', --数据库路径及名称
size=10mb, --数据库初始大小
maxsize=100mb, --数据库最大大小
filegrowth=15% --数据库增长
/*创建次要数据库文件*/
name='stuDB_data_2', --数据库逻辑名
filename='d:\mydata\stuDB_data_2.ndf', --数据库路径及名称
size=10mb, --数据库初始大小
maxsize=100mb, --数据库最大大小
filegrowth=15% --数据库增长
/*创建日志文件*/
log on
name='stuDB_log_1', --数据库逻辑名
filename='d:\mydata\stuDB_log_1.LDF', --数据库路径及名称
size=10mb, --数据库初始大小
maxsize=100mb, --数据库最大大小
filegrowth=15% --数据库增长
/*创建日次要志文件*/
name='stuDB_log_2', --数据库逻辑名
filename='d:\mydata\stuDB_log_2.ldf', --数据库路径及名称
size=10mb, --数据库初始大小
maxsize=100mb, --数据库最大大小
filegrowth=15% --数据库增长
/*如果有多个,请用,()来创建*/
/*批处理的结束 go*/
----------------------------------------------------------------------------------------------------------------
/*开始建表*/
/*-创建学员信息表-*/
use stuDB --将当前数据库设置为stuDB
--判断要创建的表是否存在,如果存在就删除
if exists(select * from sysobjects where name='stuInfo')
drop table stuInfo
create table stuInfo
stuName varchar(20) not null, --姓名,非空(必填)
stuNo char(6) not null, --学号,非空(必填)
stuAge int not null, --年龄,INT类型默认为4个字节
stuID numeric(18,0), --身份证号 代表18位数字,小数位数为0
stuSeat smallint identity(1,1), --座位号,自动编号 起始量为1,自增长1
stuAddress text --住址,允许为空,即可选输入
/*学生成绩表*/
if exists(select * from sysobjects where name='stuMarks')
drop table stuMarks
create table stuMarks
examNo char(7) not null, --考号
stuNo char(6) not null, --学号
writtenExam int not null, --笔试成绩
LabExam int not null --机试成绩
--查看表的字段
select * from stuMarks
select * from stuInfo
----------------------------------------------------------------------------------------------------------------
/*建约束的格式*/
主键约束(Primary Key Constraint):要求主键列数据唯一,并且不允许为空
唯一约束(Unique Constraint):要求该列唯一,允许为空,但只能出现一个空值。
检查约束(Check Constraint):某列取值范围限制、格式限制等,如有关年龄的约束
默认约束(Default Constraint):某列的默认值,如我们的男性学员较多,性别默认为“男”
外键约束(Foreign Key Constraint):用于两表间建立关系,需要指定引用主表的哪列
/*添加约束的语法*/
alter table 表名
add constraint 约束名 约束类型 具体的约束说明
/*删除约束的语法*/
alter table 表名
drop constraint 约束名
----------------------------------------------------------------------------------------------------------------
/*为stuInfo表添加约束*/
alter table stuInfo
add constraint PK_stuNo primary key(stuNo) --添加主键约束
alter table stuInfo
add constraint UQ_stuId unique(stuId) --添加唯一约束
alter table stuInfo
add constraint DF_stuAddress default('地址不详') for stuAddress --添加默认约束
alter table stuInfo
add constraint CK_stuAge check(stuAge between 10 and 40) --检查约束
/*为stuMarks表添加约束*/
alter table stuMarks
add constraint FK_stuNo
foreign key(stuNo) references stuInfo(stuNo) --添加主外键约束(主键为stuMarks表的stuNo键,外键为stuInfo表的stuNo键)
alter table stuMarks
add constraint CK_writtenExam check(writtenExam between 0 and 100) --检查约束,成绩只能是0到100之间的数
alter table stuMarks
add constraint CK_LabExam check(LabExam between 0 and 100) --检查约束,成绩只能是0到100之间的数
----------------------------------------------------------------------------------------------------------------
/*--为zhangsanDBUser分配对表stuInfo的select, insert, update权限--*/
GRANT select, insert, update
ON stuInfo TO zhangsanDBUser
--------------------------------------------------------------------------------------------------------------------
/*第一关:创建SQL登陆账户*/
use master --切换到数据库
exec sp_addlogin 'admin','888888' --创建SQL登陆账户
/*第二关:创建数据库用户*/
--首先切换到要分配权限的数据库
use stuDB
--exec sp_grantdbaccess '登陆账户','数据库账户'
exec sp_grantdbaccess 'admin','stuDB' --grant授权 访问数据库
/*第三关:为数据库用户分配权限*/
--grant 权限 on 表名 to 数据库用户
grant select on stuInfo to stuDB --为数据库用户名赋予查询权限
--收回查找权限
revoke 权限 on 表名 from public --为用户删除权限
revoke select on stuInfo from stuDB
exec sp_revokedbaccess 'stuDB' --删除数据库用户stuDB对数据库的访问权限
exec sp_droplogin 'admin'
– insert into user1 (id)values(1001);
– insert into user1 (id,name,address)values(1001,Null,Null);
insert into user1 values(1.
创建带有约束条件的表需要指定表名以及表中的字段、约束条件等信息。
例如,创建一个名为“students”的表,包含学生的姓名、学号、班级等字段,并设置学号为主键、班级为外键,可以使用以下SQL语句:
CREATE TABLE students (
name varchar(50) NOT NULL,
student_id int NOT NULL PRIMARY KEY,
class_id int,
FOREIGN KEY (class_id) REFERENCES classes(class_id)
其中,`NOT NULL`表示该字段不允许为空;`PRIMARY KEY`表示该字段为主键;`FOREIGN KEY`表示该字段为外键,后面的`REFERENCES`关键字表示引用了另一张表的主键。
通过这样的方式,我们就可以创建带有约束条件的表了。