总览
基础
什么是SQL: 一种面向数据库的编程语言
什么是DATABASE: 一堆行和列组成表集合
什么是TABLES: 由行列组成的数据集, 如Excel
注意: SQL不区别大小写, 必须由分号结束,中间无所谓有多个空格.
SQL DML 和 DDL
数据操作语言DML - 查询和更新指令构成了 SQL 的 DML 部分:
- SELECT - 从数据库表中获取数据
- UPDATE - 更新数据库表中的数据
- DELETE - 从数据库表中删除数据
- INSERT INTO - 向数据库表中插入数据
数据定义语言 DDL
- CREATE DATABASE - 创建新数据库
- ALTER DATABASE - 修改数据库
- CREATE TABLE - 创建新表
- ALTER TABLE - 变更(改变)数据库表
- DROP TABLE - 删除表
- CREATE INDEX - 创建索引(搜索键)
- DROP INDEX - 删除索引
设置初始密码
- 主要方法
1 | $ mysql -uroot -p #输入查看到的密码 |
- 方法一
1 | 1、使用空的初始密码登录mysql账号: |
- 方法二
1 | 1、使用空的初始密码登录mysql账号: |
- 方法三
1 | 1、使用空的初始密码登录mysql账号: |
CentOS7中mysql密码规则
1 | select @@validate_password_policy; |
安装
window host: C:\Windows\System32\drivers\etc
配置文件:
1 | [client] |
查看密码:
1 | tail /var/log/mysqld.log |
如果没有完全移除mysql,
1 | sudo apt remove mysql-* //ubuntu |
安装
1 | wget 'https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm' |
启动失败:
1 | [root@node0 lib]# systemctl restart mysqld |
- 修改服务器时间
1 | $ mysql_tzinfo_to_sql tz_dir |
- ubuntu不需要密码登录
1 | use mysql; |
- 设置权限
1 | GRANT ALL ON *.* TO root@'%' IDENTIFIED BY '123456'; |
- 警告:
1 | mysql> show warnings; |
操作
从头开始,必须要有一个数据库,然后建一张表
创建数据库
1 | mysql> CREATE DATABASE test; |
显示数据库
1 | mysql> SHOW DATABASES; |
可以看到刚才创建的test已经创建
删除数据库
1 | mysql> DROP DATABASE test; |
创建表
1 | mysql> CREATE TABLE IF NOT EXISTS user( |
显示所有的表和详细
1 | mysql> show tables; |
导入和到处数据
导入数据county_code.txt, 使用”,”分割
1 | mysql> LOAD DATA LOCAL INFILE 'county_code.txt' INTO TABLE test FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'; |
数据类型
- 数值类型
| 类型 | 大小(字节) | 范围(有符号) | 范围(无符号) | 用途 |
|---|---|---|---|---|
| TINYINT | 1 | (-128,127) | (0,255) | 小整数值 |
| SMALLINT | 2 | (-32 768,32 767) | (0,65 535) | 大整数值 |
| MEDIUMINT | 3 | (-8 388 608,8 388 607) | (0,16 777 215) | 大整数值 |
| INT或INTEGER | 4 | (-2 147 483 648,2 147 483 647) | (0,4 294 967 295) | 大整数值 |
| BIGINT | 8 | (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) | (0,18 446 744 073 709 551 615) | 极大整数值 |
| FLOAT | 4 | (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) | 0,(1.175 494 351 E-38,3.402 823 466 E+38) | 单精度 浮点数值 |
| DOUBLE | 8 | (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 双精度 浮点数值 |
| DECIMAL | 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 | 依赖于M和D的值 | 依赖于M和D的值 | 小数值 |
- 日期和时间类型
| 类型 | 大小 (字节) | 范围 | 格式 | 用途 |
|---|---|---|---|---|
| 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-01 00:00:00/2038结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07 | YYYYMMDD HHMMSS | 混合日期和时间值,时间戳 |
- 字符类型
| 类型 | 大小 | 用途 |
|---|---|---|
| CHAR | 0-255字节 | 定长字符串 |
| VARCHAR | 0-65535 字节 | 变长字符串 |
| TINYBLOB | 0-255字节 | 不超过 255 个字符的二进制字符串 |
| TINYTEXT | 0-255字节 | 短文本字符串 |
| BLOB | 0-65 535字节 | 二进制形式的长文本数据 |
| TEXT | 0-65 535字节 | 长文本数据 |
| MEDIUMBLOB | 0-16 777 215字节 | 二进制形式的中等长度文本数据 |
| MEDIUMTEXT | 0-16 777 215字节 | 中等长度文本数据 |
| LONGBLOB | 0-4 294 967 295字节 | 二进制形式的极大文本数据 |
| LONGTEXT | 0-4 294 967 295字节 | 极大文本数据 |
基本操作
删除表: DROP TABLE user
查看数据
1 | mysql> SELECT * FROM user; |
创建表
1 | CREATE TABLE IF NOT EXISTS person( |
1 | mysql> CREATE TABLE IF NOT EXISTS person( |
插入
1 | INSERT INTO person VALUES (1,'XY',20); |
查询
1 | mysql> select * from person; |
distict - 返回唯一不同的值
1 | //SELECT DISTINCT 列名称 FROM 表名称 |
WHERE条件
语法:
1 | SELECT 列名称 FROM 表名称 WHERE 列 运算符 值 |
运算符
| 操作符 | 描述 |
|---|---|
| = | 等于 |
| <> | 不等于 |
| > | 大于 |
| < | 小于 |
| >= | 大于等于 |
| <= | 小于等于 |
| BETWEEN | 在某个范围内 |
| LIKE | 搜索某种模式 |
1 | // select age is 23 |
多条件
AND 和 OR 运算符: AND 和 OR 可在 WHERE 子语句中把两个或多个条件结合起来。
如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录。
如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录。
1 | mysql> select * from person where age>20 and name='XY3'; |
ORDER BY 排序
1 | mysql> select name, age from person order by age; |
排序 DESC倒序, 默认正序
1 | mysql> select name, age from person order by age desc; |
更新 update
1 | //UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值 |
删除
1 | //DELETE FROM 表名称 WHERE 列名称 = 值 |
函数Functions
1 | SELECT function(列) FROM 表 |
MS Access中函数
| 函数 | 描述 |
|---|---|
| AVG(column) | 返回某列的平均值 |
| COUNT(column) | 返回某列的行数(不包括 NULL 值) |
| COUNT(*) | 返回被选行数 |
| FIRST(column) | 返回在指定的域中第一个记录的值 |
| LAST(column) | 返回在指定的域中最后一个记录的值 |
| MAX(column) | 返回某列的最高值 |
| MIN(column) | 返回某列的最低值 |
| STDEV(column) | |
| STDEVP(column) | |
| SUM(column) | 返回某列的总和 |
| VAR(column) | |
| VARP(column) |
在 SQL Server 中的合计函数
| 函数 | 描述 |
|---|---|
| AVG(column) | 返回某列的平均值 |
| BINARY_CHECKSUM | |
| CHECKSUM | |
| CHECKSUM_AGG | |
| COUNT(column) | 返回某列的行数(不包括NULL值) |
| COUNT(*) | 返回被选行数 |
| COUNT(DISTINCT column) | 返回相异结果的数目 |
| FIRST(column) | 返回在指定的域中第一个记录的值(SQLServer2000 不支持) |
| LAST(column) | 返回在指定的域中最后一个记录的值(SQLServer2000 不支持) |
| MAX(column) | 返回某列的最高值 |
| MIN(column) | 返回某列的最低值 |
| STDEV(column) | |
| STDEVP(column) | |
| SUM(column) | 返回某列的总和 |
| VAR(column) | |
| VARP(column) |
MS Access 中的 Scalar 函数
| 函数 | 描述 |
|---|---|
| UCASE(c) | 将某个域转换为大写 |
| LCASE(c) | 将某个域转换为小写 |
| MID(c,start[,end]) | 从某个文本域提取字符 |
| LEN(c) | 返回某个文本域的长度 |
| INSTR(c,char) | 返回在某个文本域中指定字符的数值位置 |
| LEFT(c,number_of_char) | 返回某个被请求的文本域的左侧部分 |
| RIGHT(c,number_of_char) | 返回某个被请求的文本域的右侧部分 |
| ROUND(c,decimals) | 对某个数值域进行指定小数位数的四舍五入 |
| MOD(x,y) | 返回除法操作的余数 |
| NOW() | 返回当前的系统日期 |
| FORMAT(c,format) | 改变某个域的显示方式 |
| DATEDIFF(d,date1,date2) | 用于执行日期计算 |
1 | mysql> select * from person; |
分组 group by
1 | mysql> select * from person; |
函数 where功能 -在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用。
1 | SELECT column_name, aggregate_function(column_name) |
UCASE 函数把字段的值转换为大写。
LCASE 函数将字段转换为小写
指定数字小数范围-ROUND 函数用于把数值字段舍入为指定的小数位数。
1 | SELECT ROUND(column_name,decimals) FROM table_name |
获取时间
1 | mysql> select id, name, age, now() from person; |
FORMAT() 格式化