一、SQL
SQL 是用于访问和处理数据库的标准的计算机语言
二、做什么?
1、SQL 面向数据库执行查询
2、SQL 可从数据库取回数据
3、SQL 可在数据库中插入新的记录
4、SQL 可更新数据库中的数据
5、SQL 可从数据库删除记录
6、SQL 可创建新数据库
7、SQL 可在数据库中创建新表
8、SQL 可在数据库中创建存储过程
9、SQL 可在数据库中创建视图
10、SQL 可以设置表、存储过程和视图的权
二、RDBMS
RDBMS 指关系型数据库管理系统,全称 Relational Database Management System。
RDBMS 是 SQL 的基础,同样也是所有现代数据库系统的基础,比如 MS SQL Server、IBM DB2、Oracle、MySQL 以及 Microsoft Access。
RDBMS 中的数据存储在被称为表的数据库对象中。
表是相关的数据项的集合,它由列和行组成。
三、RDBMS术语
1、数据库: 数据库是一些关联表的集合。.
2、数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。
3、列: 一列(数据元素) 包含了相同的数据, 例如邮政编码的数据。
4、行:一行(=元组,或记录)是一组相关的数据,例如一条用户订阅的数据。
5、冗余:存储两倍数据,冗余降低了性能,但提高了数据的安全性。
6、主键:主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。
7、外键:外键用于关联两个表。
8、复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。
9、索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。
10、参照完整性: 参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性。
四、使用数据库
1.使用命令检查数据库是否启动:
可以在DOS窗口输入 net start mysql启动数据库服务,或者输入 net stop mysql停止MySQL服务!
2.连接数据库:
mysql -h服务器主机地址 -u用户名 -p密码
注意:如果是在本机操作,不用写-h.....-p和密码之间没有空格!!!
3.查看当前安装的MySql版本信息和连接用户名:
SELECT VERSION(),USER();
其中VERSION()返回的是版本号; USER()返回的是连接数据库的用户名:
SQL的组成:根据功能划分,SQL语言主要由以下几个部分组成。
(一)DML (数据操作语言,又叫数据操纵语言):用来插入,修改,删除数据库中的数据,如INSERT ,UPDATE,DELETE等。
(二)DDL (数据定义语言):用来建立数据库,数据库对象,定义数据表结构等。大部分是以CREATE 开头的命令,如CREATE TABLE ,CREATE VIEW 以及DROP TABLE等。
(三)DQL(数据查询语言):用来对数据的查询,如SELECTdent
(四)DCL (数据控制语言):用来控制数据库组件的存取许可,存取权限等。如GRANT ,REVOKE,COMMIT等。
4.数据库中的运算符
(一、算术运算符)
五、操作数据库
1.对数据库的基本
create database 数据库名; #创建数据库
注意:在Windows系统下,默认是不区分大小写的!分号代表一行结束,一般都加上。
show databases; #查看所有的数据库
use 数据库; #切换数据库
drop database 数据库名; #删除数据库
#查看数据库的定义
SHOW CREATE datebase 表名;
创建数据库 | CREATE DATABASE [IF NOT EXISTS] 数据库名; |
删除数据库 | DORP DATABASE [IF EXISTS] 数据库名; |
查看数据库 | SHOW DATABASE; |
使用数据库 | USE 数据库名; |
六创建表
#语法如下:
create table [if not exists] 表名(
字段名 数据类型 [字段属性] [约束] [索引] [注释],
)[表类型][表字符集][注释];
#注意:[]里面的可写可不写,根据实际需求去写就好!
七、数据字段属性
UNSIGNSD | 无符号 | 声明该数据列 | |
ZEROFILL | 0填充 | 不足位数的用0来填充 | |
AUTO_INCREMENT | 自动增长,每添加一条数据,自动在上一个记录数上加1 | 通常用于设置主键,且为整数类型 | 可定义起始值和步长 |
八、常用的字段属性约束
字段属性约束名 | 关键字 | 说明 |
非空约束 | NOT NULL | 不允许为空NULL |
默认约束 | DEFAULT | 默认值设置 格式为:DEFAULT '男' 或者 DEFAULT 1 |
唯一约束 | UNIQUE KEY | 表示字段的值是唯一的,允许为空,但只能有一个为空 |
主键约束 | PRIMARY KEY | 设置该字段为表的主键,可以作为该表的唯一的标识 |
外键约束 | FOREIGN KEY | 用于建立两表之间的关系,需要指定那个表引用哪个字段。 注意:InnoDB引擎:支持外键,MyISAM不支持,外键关联的表要求都是InnoDB的表。
|
自动增长 | AUTO_INCREMENT | (1)设置该列为自增字段,默认为每条自增1 (2) 通常用来设置主键,而且是整数类型 (3) 可设置初始值和步长 |
九、数据类型
1、数值类型
数据类型 | 字节数 | 取值范围 |
TINYINT | 1 | 有符号:-2的7次方~2的7次方 无符号:0~2的8次方-1 |
INT | 4 | 有符号值:-2的31次方~2的31次方-1 |
DOUBLE | 8 | |
DECIMAL8[(M),D] | M+2字节 | M:总位数 D:小数位精度位数 |
2、字符串类型
数据类型 | 字节 | 说明 |
CHAR【M】 | M字节 | 固定长度 M为0~255的整数 |
VARCHAR[M] | 可变长度 | 可变长度的字符串 M为0~65535的整数 |
TINYTEXT | 0~255 | 微型文本串 |
TEXT | 0~65535 | 长文本 |
3、日期类型
数据类型 | 格式 | 取值范围 |
DATE | YYYY-MM-DD | 1000-01-01~9999-12-31 |
DATETIME | YY-MM-DD hh:mm:ss | 1000-01-01 00:00:00 ~9999-12-31 23:59:59 |
TIME | hh:mm:ss | |
TIMESTAMP | YYYYMMDDHHMMSS | 1970年某时刻~2038年某时刻,精度为1s |
YEAR | YYYY格式的年份 | 1901~2155 |
4、数据表存储类型
名称 | MyISAM | InnoDB |
事务处理 | 不支持 | 支持 |
数据行锁定 | 不支持 | 支持 |
外键约束 | 不支持 | 支持 |
全文索引 | 支持 | 不支持 |
表空间大小 | 较小 | 较大,约2倍 |
引用场景:
- MyISAM存储引擎:访问速度较快,可以对不需要事务处理,以访问为主的应用适合!
- InnoDB存储引擎:在事务处理上有优势,可以对需要频繁更新,删除,同时对事务要求比较高,需要实现并发控制的应用!
- .MySQL 5.5以上的版本默认的存储引擎是InnoDB.
#可以通过以下查看默认引擎 show variables like 'storage_engine%'; #修改默认的存储引擎 defaultsrotage- engine=InnoDB; #注意:修改后要重新启动MySQL服务才生效
指定表的存储引擎
-
create table 表名( #.......省略代码 )engine=储存引擎;
十、修改数据表(ALTER TABLE)
1.修改数据表
修改 表名 | ALTER TABLE 旧表名 AS 新表名; |
添加 字段 | ALTER TABLE 表名 ADD字段名 列类型【属性】; |
修改 字段 | ALTER TABLE 表名 MODIFY字段名,列类型【属性】 ALTER TABLE 表名 CHANGE旧字段,新字段名,列类型【属性】; |
删除 字段 | ALTER TABLE表名 DROP 字段名; |
2.关于主键外建设置
#创建表
create table student(
`studentNo` int(4) primary key, #设置主键,``区别保留字
);
#多字段联合主键
create table student(
id int(4),
name varchar(50),
primary key(id,name) #设置联合主键
);
添加主键约束alter table 表名 add constarint 主键名 primary key 表名 (主键字段);
添加外键约束:alter table 表名 add constarint 外键名 foreign key (外键字段) references 关联表名(关联字段);
注意:添加外键约束时,外键表在前,主键表在后!主键是被引用,外键是引用主键!#删除时要先删除子表,再删除主表。
3.查看表删除表
#查看表
show tables;
#查看表的定义
desc 表名;
#删除表
drop table 表名;
#查看表的结构
DESC 表名;
#设置严格检查模式
SET sql_mode='strict_trans_tables';
4.关于自增
#设置初始值
auto_increment=5;
#设置步长
auto_increment_increment=3;
#设置步长起点偏移
auto_increment_offset=1;