sql基础和约束,引擎

MySql致力于支持全套ANSI/ISO SQL标准


在MySql数据库中, SQL语句主要可以划分为以下几类


DDL(Data Definition Language):数据定义语言,定义对数据库对象(库、表、列、索引)的操作。
CREATE、DROP、ALTER、RENAME、 TRUNCATE等

DML(Data Manipulation Language): 数据操作语言,定义对数据库记录的操作。
INSERT、DELETE、UPDATE、SELECT等

DCL(Data Control Language): 数据控制语言,定义对数据库、表、字段、用户的访问权限和安全级别。
GRANT、REVOKE等

Transaction Control:事务控制
COMMIT、ROLLBACK、SAVEPOINT等

SQL语句的书写规范

在数据库系统中,SQL语句不区分大小写(建议用大写) 。但字符串常量区分大小写。

SQL语句可单行或多行书写,以“;”结尾。关键词不能跨多行或简写。

用空格和缩进来提高语句的可读性。子句通常位于独立行,便于编辑,提高可读性。
SELECT * FROM tb_table

注释
SQL标准:
/**/。多行注释
“--” 单行注释
MySql注释:“#”

SHOW DATABASES 
语法:
SHOW DATABASES[LIKE wild];
如果使用LIKE wild不符,wild字符串可以是一个使用SQL的”%”和”_”通配符的字符串。

功能:列出在MySql服务器主机上的数据库。

MySql自带数据库

Information_schema:主要存储了系统中的一些数据库对象信息:如用户表信息、列信息、权限信息、字符集信息、分区信息等。(数据字典表)

Mysql:存储了系统的用户权限信息及帮助信息。

Test:系统自动创建的测试数据库,任何用户都可以使用

CRATE DATABASE
语法:
CREATE DATABASE [IF NOT EXISTS]数据库名;
功能:用给定的名字创建一个数据库
如果数据库已经存在,发生一个错误


DROP DATABASE
语法:
DROP DATABASE [IF NOT EXISTS]数据库名;
功能:删除数据库中得所有表和数据库
要小心使用这个命令

使用USE选用数据库
语法:
USE 数据库名;
功能:把指定数据库作为默认(当前)数据库使用,用于后续语句。




CREATE TABLE 表名(
列名  列类型,
列名 列类型
);
功能:在当前数据库中 创建一张表


DROP TABLE[IF EXISTS] 表名;
功能: 删除指定的表



修改列类型:ALTER TABLE 表名 MODIFY 列名 列类型;


增加列:ALTER TABLE 表名 ADD 列名 列类型;


删除列:ALTER TABLE 表名 DROP 列名;


列改名:ALTER TABLE 表名 CHANGE 旧列名 新列名 列类型;


更改表名:ALTER TABLE 表名 RENAME 新表名;

RENAME TABLE 表名 TO 新表名;


删除表
表中所有数据将被删除
没有完成的事务被提交
所有相关的索引被删除
不能回滚
表结构被删除,表对象不再存在
DROP TABLE table_name;


MYSQL数据库字典

由information_schema数据库负责维护

tables-存放数据库里所有的数据表、以及每个表所在数据库。

schema-存放数据库里所有的数据库信息

views-存放数据库里所有的视图信息。

columns-存放数据库里所有的列信息。

triggers-存放数据库里所有的触发器。

routines-存放数据库里所有存储过程和函数。

key_column_usage-存放数据库所有的主外键

table_constraints-存放数据库全部约束。

statistics-存放了数据表的索引。


什么是约束
约束是在表上强制执行的数据校验规则.
约束主要用于保证数据库的完整性。
当表中数据有相互依赖性时,可以保护相关的数据不被删除.

非空约束(NOT NULL):
列级约束,只能使用列级约束语法定义。
确保字段值不允许为空
只能在字段级定义
CREATE TABLE tb_student(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(18) NOT NULL
)


唯一约束
唯一性约束条件确保所在的字段或者字段组合不出现重复值
唯一性约束条件的字段允许出现多个NULL
同一张表内可建多个唯一约束
唯一约束可由多列组合而成
建唯一约束时MySQL会为之建立对应的索引。
如果不给唯一约束起名,该唯一约束默认与列名相同。
CREATE TABLE tb_student(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(18) UNIQUE NOT NULL
)


主键约束
主键从功能上看相当于非空且唯一
一个表中只允许一个主键
主键是表中唯一确定一行数据的字段
主键字段可以是单字段或者是多字段的组合
当建立主键约束时,MySQL为主键创建对应的索引
主键约束名总为PRIMARY。
CREATE TABLE tb_student(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(18)
)


外键约束
外键是构建于一个表的两个字段或者两个表的两个字段之间的关系
外键确保了相关的两个字段的两个关系:
子(从)表外键列的值必须在主表参照列值的范围内,或者为空(也可以加非空约束,强制不允许为空)。
当主表的记录被子表参照时,主表记录不允许被删除。
外键参照的只能是主表主键或者唯一键,保证子表记录可以准确定位到被参照的记录。
格式FOREIGN KEY (外键列名)REFERENCES 主表(参照列)


CREATE TABLE tb_dept(
dept_id INT PRIMARY KEY,
NAME VARCHAR(18),
description VARCHAR(255)
);
CREATE TABLE tb_employee(
employee_id INT PRIMARY KEY,
NAME VARCHAR(18),
gender VARCHAR(10),
dept_id INT REFERENCES tb_dept(dept_id),
address VARCHAR(255)
);


Check 约束
既可作为列级约束,也可作为表级约束
定义在字段上的每一记录都要满足的条件
在check中定义检查的条件表达式,数据需要符合设置的条件
条件表达式不允许使用
–参照其他记录的值
CREATE TABLE tb_student(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(18),
age INT CHECK(age > 18 AND age < 60)
)

定义约束的语法
列级约束:在定义列的同时定义约束
表级约束:在定义了所有列之后定义的约束

约束名的取名规则:表名_列名_约束类型简写


alter table 表名 add constraint 约束名 约束类型(要添加约束的列名)


删除约束
语法如下–alter table 表名drop constraint 约束名


表单存储引擎
mysql中的数据用各种不同的技术存储在文件(或内存)中,每中技术都使用不同的存储机制,索引技巧,锁定水平
这些不同的技术以及配套的相关功能在mysql中被称作存储引擎(表类型)


默认情况下,创建表不指定表的存储引擎,则会使用配置文件my.int中defualt-storage-engine=InnoDB指定的InnoDB


MyISAM:应用于以读写操作为主,很少更新,删除,并对事务的完整性,并发性要求不高的情况


InnoDB(默认使用):支持acid事务,支持主键,自动增长,锁,在并发条件下要求数据的一致性的情况


MEMORY(内存模式):表的数据存入在内存中,电脑关机后,数据丢失


BLACKHOLE(黑洞):数据写入后都会消失,一般用于记录日志,不存储数据


CSV:使用CSV格式存储(excel),不支持事务,不支持自动增长,不支持主键锁,不允许插入空的列
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值