名称 | 全称 | 简称 |
数据库 | 存储数据的仓库,数据是有组织的进行存储 | DataBase (DB) |
数据库管理系统 | 操纵和管理数据库的大型软件 | DataBase Management System (DBMS) |
sQL | 操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准 | Structured Query Language (SQL) |
通用语法:
1,SQL语句可以单行或多行书写,以分号结尾
2,SQL语句可以使用空格/缩进来增强语句的可读性
3,MySQL数据库的SQL语句不区分大小写,关键字建议使用大写
4,注释: 单行注释:--注释内容或#注释内容(MySQL特有)
多行注释:/*注释内容*/
分类 | 全称 | 说明 |
DDL | Data Definition Language | 数据定义语言,用来定义数据库对象(数据库,表,字段) |
DML | Data Manipulation Language | 数据操作语言,用来对数据库表中的数据进行增删改 |
DQL | Data Query Language | 数据查询语言,用来查询数据库中表的记录 |
DCL | Data Control Language | 数据控制语言,用来创建数据库用户、控制数据库的访问权限 |
查询 | 查询所有数据库:SHOW DATABASES; |
查询当前数据库:SELECT DATABASE(); | |
创建 | CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集] [COLLATE 排序规则]; |
删除 | DROP DATABASE [IF EXISTS]数据库名; |
使用 | USE 数据库名; |
修改 | 修改数据库编码:ALTER DATABASE MYDB1 CHARACTER SET UTF8; |
查询当前数据库所有表 | SHOW TABLES; |
查询表结构 | DESC表名; |
查询指定表的建表语句 | SHOW CREATE TABLE表名; |
create table [if not exists] 表名(
字段1 字段1类型[(宽度)] [约束条件] [comment 字段1注释],
字段2 字段2类型[(宽度)] [约束条件] [comment 字段2注释],
字段3 字段3类型[(宽度)] [约束条件] [comment 字段3注释],
...
字段n 字段n类型[comment 字段n注释]
)[表的一些设置];
注意:[ ...]为可选参数,最后一个字段后面没有逗号
1,数值类型
类型 | 大小 | 范围(有符号) | 范围(无符号) | 用途 |
TINYINT | 1 byte | (-128,127) | (0,255) | 小整数值 |
SMALLINT | 2 bytes | (-32 768,32 767) | (0,65 535) | 大整数值 |
MEDIUMINT | 3 bytes | (-8 388 608,8 388 607) | (0,16 777 215) | 大整数值 |
INT或INTEGER | 4 bytes | (-2 147 483648,2 147.483647) | (0,4 294 967 295) | 大整数值 |
BIGINT | 8 bytes | (-9,223,372,036,854,775,808,92233036 854 775 807) | (0,18446 744073 709551615) | 极大整数值 |
FLOAT | 4 bytes | (-3.402823466 E+38,3.402 823 466 351E+38) | 0,(1.175 494 351E-38,3.402 823 466E+38) | 单精度浮点数值 |
DOUBLE | 8 bytes | (-1.797693 134862315了E+308。1.797693 134862 315 7E+308) | 0,(2.225 073 858 5072014 E-308,1.797693134862 315 7E+308) | 双精度浮点数值 |
DECIMAL decimal(M,D) decimal(5,2) 一共5位,保留2位 |
依赖于M和D的值 | 依赖于M和D的值 | 小数值 |
2,字符串类型
类型 | 大小 | 用途 |
CHAR | 0-255 bytes | 定长字符串 |
VARCHAR | 0-65 535 bytes | 变长字符串 |
TINYBLOB | 0-255 bytes | 不超过255个字符的二进制字符串 |
TINYTEXT | 0-255 bytes | 短文本字符串 |
BLOB | 0-65 535 bytes | 二进制形式的长文本数据 |
TEXT | 0-65 535 bytes | 长文本数据 |
MEDIUMBLOB | 0-16777215 bytes | 二进制形式的中等长度文本数据 |
MEDIUMTEXT | 0-16 777 215 bytes- | 中等长度文本数据 |
LONGBLOB | 0-4 294 967 295 bytes | 二进制形式的极大文本数据 |
LONGTEXT | 0-4 294 967295 bytes | 极大文本数据 |
3,日期类型
类型 | 大小( bytes) | 范围 | 格式 | 用途 |
DATE | 3 | 1000-01-01/9999-12-31 | YYYY-MM-DD | 日期值 |
TIME | 3 | '-838:59:59/'838:59:59" | HH:MM:SS | 时间值或持续时间 |
YEAR | 1 | 1901/2155 | YYYY | 年份值 |
DATETIME | 8 | 1000-01-01 00:00:00/9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值 |
TIMESTAMP | 4 | 1970-01-0100:00:00/2038 结束时间是第2147483647秒,北京时间2038-1-1911:14:07,格林尼治时间2038年1月19日凌晨03:14:07 |
YYYYMMDD HHMMSS | 混合日期和时间值,时间戳 |
1,修改表添加列
语法格式
alter table 表名 add 列名 类型(长度) [约束];
例子:
#为student表添加一个新的字段为:系别dept类型为varchar(20)
ALTER TABLE student ADD dept VARCHAR(20);
2,修改列名和类型
语法格式
alter table 表名 change 旧列名 新列名 类型(长度) 约束;
例子:
#为student表的dept字段更换为department varchar(30)
ALTER TABLE student change dept department VARCHAR(30);
3,修改表删除列
语法格式:
alter table 表名 drop 列名;
例子:
#删除student表中department这列
ALTER TABLE student DROP department;
4,修改表名
语法格式:
rename table 表名 to 新表名;
例子:
#将表student改名成stu
rename table student to stu;
DML是指数据操作语言,英文全称是Data Manipulation Language,用来对数据库中表的数据记录进行更新
关键字:
插入insert 删除delete truncate 更新update
语法格式:
insert into 表(列名1,列名2,列名3...) values (值1 ,值2,值3...);//向表中插入某些
insert into 表values(值1,值2,值3... );//向表中插入所有列
例子:
insert into student(sid,name,gender ,age ,birth ,address,score)values (1001,男',18, ' 1996-12-23','北京',83.5);
insert into student values (1001, '男',18,'1996-12-23','北京',83.5);
语法格式:
update 表名 set 字段名=值,字段名=值...;
update 表名 set 字段名=值,字段名=值... where条件;
例子:
--将所有学生的地址修改为重庆
update student set address ='重庆';
--将id为1004的学生的地址修改为北京
update student set address = '北京' where id = 1004
--将id为1005的学生的地址修改为北京,成绩修成绩修改为100
update student set address = '广州',score=100 where id = 1005
语法格式:
delete from 表名 [where 条件];
truncate table 表名 或者truncate表名
例子:
--1.删除sid为1004的学生数据
delete from student where sid=1004;
--2.删除表所有数据
delete from student;
--3.清空表数据
truncate table student;
truncate student;
注意:delete和truncate原理不同,delete只删除内容,而truncate类似于drop table,可以理解为是将整个表删然后再创建该表;
概念:
约束英文: constraint
约束实际上就是表中数据的限制条件
作用:
表在设计的时候加入约束的目的就是为了保证表中的记录完整性和有效性,比如用户表有些列的值(手机号)不能为空,有些列的值(身份证号)不能重复
分类:
主键约束(primary key) PK
自增长约束(auto_increment)
非空约束(not null)
唯一性约束(unique)
默认约束(default)
零填充约束(zerofill)
外键约束(foreign key) FK
概念:
1,MySQL主键约束是一个列或者多个列的组合,其值能唯一地标识表中的每一行,方便在RDBMS中尽快的找到某一行
2,主键约束相当于唯一约束+非空约束的组合,主键约束列不允许重复,也不允许出现空值
3,每个表最多只允许一个主键
4,主键约束的关键字是:primary key
5,当创建主键的约束时,系统默认会在所在的列和列组合上建立对应的唯一索引
操作:
添加单列主键
添加多列联合主键
删除主键
创建单列主键有两种方式,一种是在定义字段的同时指定主键,一种是定义完字段之后指定主键
方法一:
--在 create table 语句中,通过 PRIMARY KEY 关键字来指定主键
--在定义字段的同时指定主键,语法格式如下:
create table表名(
...
<字段名> <数据类型> primary key
...
)
create table emp1 (
eid int primay key ,
name VARCHAR(20),
deptId int,
salary double
);
方法二:
--在定义字段之后再指定主键,语法格式如下:
create table表名(
...
[constraint <约束名>] primary key [字段名]
);
create table emp2 (
eid INT,
name VARCHAR(20),
deptId INT,
salary double,
(constraint pkl)(可以不写) primary key (id)
);
所谓的联合主键,就是这个主键是由一张表中多个字段组成的。
注意:
1,当主键是由多个字段组成时,不能直接在字段名后面声明主键约束
2,一张表只能有一个主键,联合主键也是一个主键
语法:
create table表名(
...
primary key(字段1,字段2,...,字段n)
) ;
create table emp3 (
name varchar (20),
deptId int,
salary double,
primary key (name,deptId)
);