SQL语言,是结构化查询语言(Structured Query Language)的简称。
SQL语言是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;
是各种数据库厂商提供的数据库均支持的ISO标准,同时也是数据库脚本文件的扩展名。
SQL的分类
DDL(Data Definition Language 数据定义语言): 用来定义数据库对象(对数据库和表的整体进行操作,不对存储的数据进行处理),包括数据库、表、列等
- 创建、删除数据库
- 创建、删除、修改表
- 关键字:create、alter、drop
DML(Data Manipulation Language 数据操作语言):用来对数据库表中的数据进行增、删、改(更新表中数据)
- 向表中添加、删除、修改数据
- 关键字:insert、delete、update
DQL(Data Query Language 数据查询语言):用来对数据库表中的数据进行查询
- 查询表中的数据
- 关键字:select、where、from
DCL(Data Control Language 数据控制语言):用来定义数据的访问权限和安全级别,及创建用户
SQL通用语法
- SQL语句可以单行或多行书写,以分号结尾;
- 可使用空格或缩进来增强语句可读性;
- MYSQL数据库的SQL语句不区分大小写,关键字建议使用大写;
- 同样可以使用/**/的方式完成注释;
-
MYSQL 中常用的数据类型如下:
分类 类型名称 说明 整数类型 tinyint 很小的整数 (0~127) smallint 小的整数 mediumint 中等大小的整数 int(integer) 普通大小的整数 (2147483647) bigint 最大2^64 小数类型 float 单精度浮点型 (单精度浮点数最多有7位十进制有效数字)占用四个字节 double 双精度浮点型 (15位十进制有效数字)占用八个字节 decimal(m,d) 压缩严格的定点数 decimal(10,2) 日期类型 year YYYY 1901~2155 time HH:MM:SS -00:00:00~23:59:59 date YYYY-MM-DD 1000-01-01~9999-12-2 datetime YYYY-MM-DD HH:MM:SS timestamp YYYY-MM-DD HH:MM:SS 1970~01~01 00:00:00UTC 文本、二进制类型 char(m) m为0~255之间的整数定长char(10)tom varchar(m) m为0~65535之间的整数变长 tinyblob 允许长度0~255字节 blob 允许长度0~65535字节 mediumblob 0~167772150字节 longblob 0~4294967295字节 tinytext 0~255字节 text 0~65535字节 mediumtext 0~167772150字节 longtext 0~4294967295字节 varbinary(m) 允许长度0~M个字节的变长字节字符串 binary(m) 允许长度0~M个字节的定长字节字符串 - 数据操作语法示例
DDL
-
创建数据库
- create database 数据库名; #直接创建,若存在则报错 - create database if not exists 数据库名; #若数据库不存在才创建 - create database 数据库名 character set 字符集; #创建数据库时设置字符集 -
查看所有数据库
- show databases; -
删除数据库
- drop database 数据库名; -
使用数据库
- use 数据库名; -
查看当前正在使用的数据库
- select database(); -
创建数据表
- create table if not exists 表名( 字段名 类型(长度)[约束], 字段名 类型(长度)[约束], ... ); - 类型: varchar(n)字符串 int 整形 double 浮点 date 时间 timestamp 时间戳 - 约束: primary key 主键,被主键修饰字段种的数据,不能重复、不能为null -
查看表
- show tables; #查看数据库中的所有表 - desc 表名; #查看表结构 -
删除表
- drop table 表名; -
修改表结构格式
- alter table 表名 add `列名` 类型(长度) [约束]; #给表新增一列 - alter table 表名 change `旧列名` 新列名 类型(长度) [约束]; #修改某一列列名和数据类型 - alter table 表名 drop 列名; #删除某一列 - rename table 列名 to 新列名; #重命名表
DML
-
插入表记录 insert
- insert into 表名(字段1、字段2、字段3...) values(值1、值2、值3...); #一次性插入单行数据 - insert into 表名(字段1、字段2、字段3...) values(值1、值2、值3...),(...),(...); # 一次性插入多行数据 # 注意: - 值与字段必须一一对应,个数相同,类型相同 - 值得数据大小必须在字段长度范围内 - 除了数值类型外,其他字段类型的值必须使用引号(建议单引号) - 如果插入空值,可以不写字段,或者插入null - 为全部字段赋值时可以省略字段 -
更新表记录 update
- update 表名 set 字段名=值,字段名=值,...; #更新字段对应所有行的值 - update 表名 set 字段名=值,字段名=值,... where 条件; #更新符合条件的字段的行的值 -
删除表记录
- delete from 表名 [where 条件]; # 不加where 条件 时删除整张表中的数据 - truncate table 表名; # 完全清空数据表 # 注意 - delete 逐行删除表记录,不清空auto_increment记录数 - truncate 删除整张表,重新建表,auto_increment记录数被重新置零,重新计数 - auto_increment 作为约束 只能用在主键并且主键为数字的列,主键值会自动增长 -
SQL约束
-
主键约束
PRIMARY KEY 约束唯一标识数据库表中的每条记录 主键必须包含唯一的值 主键列不能包含null值 每个表都应该有且只有一个主键 # 添加主键约束 - 创建表时,在字段描述处,声明指定字段为主键 - create table 表名 ( id int primary key, xxx varchar(10), xxx... ); - 创建表时,在constraint约束区域,声明指定字段为主键 - 格式:[constraint 名称] primary key (字段列表) - 关键字constraint 可以省略,如果需要为主键命名,constraint不能省略,主键名称一般没用。 - 字段列表需要使用小括号括住,如果有多字段需要使用逗号隔开,声明两个以上字段为主键,称为联合主键。 - create table 表名( firstname varchar(20), lastname varchar(20), adress varchar(255), city varchar(255), ... constraint 主键名 primary key (firstname,lastname) ); # 删除主键约束 - alter table 表名 drop primary key; # 自动增长列 - 通常希望在每次插入新记录时,数据库自动生成字段的值 - 可以在表中使用auto_increment(自动增长列) 关键字,自动增长列类型必须是整形,自动增长列必须为键(一般为主键) - create table 表名( id int primary key auto_increment=100,# 可以指定auto_increment 的值 xxx, ... ); -
非空约束
- NOT NULL约束强制列不接受NULL值。 - NOT NULL约束强制字段始终包含值。这意味着,如果不向对应字段添加值,就无法插入新记录或者更新记录。 - create table 表名( id int not null, name varchar(20) not null, ... ); -
唯一约束
- UNIQUE 约束唯一标识数据库表中的每条记录。 - UNIQUE 和 PRIMARY KEY 约束均为 列 或者 列集合提供唯一性保证。 - PRIMARY KEY 拥有自动定义的UNIQUE 约束。 - create table 表名( id int unique, name char(20) unique, ... ); # 注意: - 每个表可以有多个UNIQUE约束,但是只能有一个PRIMARY KEY 约束。 - 唯一约束的列可以允许有多个NULL,因为mysql中NULL值和任何值都不相同,包括NULL自身。 -
外键约束
- FOREIGN KEY 表示外键约束。多表操作中会遇到。
-
Comments