MySQL5.7 基础之二
设计范式:
第一范式:字段是原子性
第二范式:存在可用主键
第三范式:任何表都不应该有依赖于其它表非主键的字段
创建数据库、设计数据表
字段:字段名、数据类型、约束(通过键来实现,而键其实可以当做索引来用)
DDL:CREATE、DROP、ALTER
DML:INSERT(REPLACE)、DELETE、UPDATE 、SELECT
DCL:GRANT、REVOKE
数据类型: datatype
字符:
定长字符:
不区分大小写 char(#) 用或不用,给1个占10个
区分大小写 binary(#) 变长字符:
不区分大小写 varchar(#) 有结束符,占用一个, 给1个,占2个
区分大小写 varbinary(#) 对象存储:大文本存储
TEXT 不区分大小写
BLOB 区分----二进制的大对象
内置类型:
ENUM 枚举(给你几种,最多有几种选择)
SET 集合
数值:
精确:整型[int]、十进制[decimal]
int
tinyint 1byte
smallint 2bytes
mediumint 3bytes
int 4bytes
bigint 8bytes 范围: - ^-
近似: 单精度浮点[float]、双精度浮点[double]
日期时间型:
日期:DATE
时间:TIME
日期时间:TIMESTAMP
年份:YEAR(2),YEAR(4)
修饰符:
所有类型:
NOT NULL :非空约束
DEFAULT NULL :设定默认值
UNIQUE KEY
PRIMARY KEY
数值型适用:
UNSIGNED :(对整型和数值型)无符号---不能表示负数,仅用于表示正数
AUTO_INCREMENT :自增长--整型
二、数据库基础应用:
2.1、DDL
2.1.1、表:
CREATE TABLE [IF NOT EXISTS] 'tbl_name' (col1 type1,col2 type2, ...) col1 type1: PRIMARY KEY(col1,...) INDEX(col1,...) UNIQUE KEY(col1,...)
查询默认引擎:
mysql>SHOW ENGINES;
获取帮助:
mysql>HELP CREATE TABLE; 获取表创建命令: mysql> SHOW CREATE TABLE students; 查询表状态:
mysql>SHOW TABLE STATUS LIKE 'tbl_name' \G; \G--把每一行数据竖排显示
删除表
mysql> DROP TABLE [IF EXISTS] 'tbl_name';
查看表上的索引
mysql> SHOW INDEXES FROM [db_name.]tbl_name;
查看表结构
mysql> DESC tbl_name;
查看某库中的表
mysql> SHOW TABLES FROM database_name;
E.G
定义单字段的唯一键:
mysql> CREATE TABLE students (id int UNSIGNED NOT NULL PRIMARY KEY,name VARCHAR(20) NOT NULL,Age tinyint UNSIGGNED);

多字段组合式唯一键(两者联合起来不一样就可以):
mysql> CREATE TABLE tbl2 (id int UNSIGNED NOT NULL ,name VARCHAR(20) NOT NULL,Age tinyint UNSIGNED,PRIMARY KEY(id,name));

2.1.2、ALTER 修改表
帮助:
mysql>HELP ALTER TABLE;
ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT} 设定默认值或移除默认值这两个属性
CHANGE [COLUMN] old_col_name new_col_name column_definition 修改字段名字和字段定义
[FIRST|AFTER col_name]
MODIFY [COLUMN] col_name column_definition 只修改字段定义 或字段的排序
[FIRST | AFTER col_name]
语法:
ALTER TABLE 'tb_name'
a) 字段:
添加字段:add
| ADD [COLUMN] col_name column_definition [FIRST | AFTER col_name]
e.g mysql> ALTER TABLE students ADD gender ENUM('m','f') AFTER name;
删除字段:drop
e.g mysql> ALTER TABLE students drop gender ;
修改字段:alter(删除字段默认值)、change(该字段名称)、modify(字段属性定义)
注:该字段名字的时候,还必须把字段的属性定义出来,任何字段都有其字段定义
类型修饰符必须紧跟在类型后面
如果主键定义过,可以不需要重新定义。
e.g
修改字段名称
mysql> ALTER TABLE students CHANGE id sid int UNSIGNED NOT NULL PRIMARY KEY;
ERROR 1068 (42000): Multiple primary key defined
mysql> ALTER TABLE students CHANGE id sid int UNSIGNED NOT NULL ;
Query OK, rows affected (0.01 sec)
Records: Duplicates: Warnings: 0
b) 索引: 键都是索引,但索引不是键
添加索引:add
添加唯一键约束:
| ADD [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY] [index_name]
e.g mysql> ALTER TABLE students ADD UNIQUE KEY(name);
添加索引:
| ADD {INDEX|KEY} [index_name]
e.g mysql> ALTER TABLE students ADD INDEX(age);
删除索引:drop
注:每个索引都有Key_name字段值,如果定义索引时没给索引名字,那么索引名字就是字段名字;如果索引在多键上,那么索引名字就是多键上的第一个字段名字
c) 表选项 (副作用大一般不用)
2.1.3、索引:是特殊数据结构;定义在查找时作为查找条件的字段;只用添加和删除
优点:加速查询操作
缺点:额外占用空间;插入数据时需要插入2次-----原表中插入一行的同时索引中也要插入一行,更重要的是索引是排序的
a)、帮助:
mysql> HELP CREATE|DROP INDEX;
b)、语法:
创建索引:
CREATE INDEX index_name ON tbl_name (inde_col_name,...)
注:索引只要用不上了就立刻删除,否则会产生多余IO,影响性能 删除索引:
DROP INDEX index_name ON tbl_name
e.g
mysql> DROP INDEX name ON students;

三、DML: INSERT、DELETE、SELECT、UPDATE
3.1、INSERT
a)帮助信息:
mysql> HELP INSERT;
b)语法:
INSERT [INTO] tbl_name [(col1_name,col2_name,...)] {VALUES | VALUE} (value1_list),(value2_list),(...),...
e.g mysql> INSERT INTO students VALUES(1,'yangguo','m'),(2,'guoxiang','F');
mysql> INSERT INTO students (sid,name) VALUES (3,'zhangwuji'),(4,'zhaoming');

3.2、DELETE
3.2.1、语法:
DELETE FROM tbl_name [WHERE clause] [ORDER BY 'col_name'[DESC]][LIMIT [m,]n]
#只写到WHERE前面会清空整张表(慎)
e.g mysql> DELETE FROM students WHERE sid=3;
3.3、SELECT
3.3.1、语法
SELECT col1,col2,... FROM tbl_name [WHERE clause] [ ORDER BY 'col_name' [ASC|DESC] ] [LIMIT [m,]n] #指定字段显示 [#指定字段并判断显示 ] [排序【升序|降序】]
LIMIT
SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数。
LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,
第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。初始记录行的偏移量是 0(而不是 1):
为了与 PostgreSQL 兼容,MySQL 也支持句法: LIMIT # OFFSET #。
3.3.2、字段表示法:
*: 所有字段
as: 字段别名 col1 AS alias1
mysql> SELECT sid as stusid,name as stuname FROM students;

注:不允许一个经常拿来做查找条件字段出现空值
E.G
a)mysql> SELECT * FROM students WHERE sid>3;

b)mysql> SELECT * FROM students WHERE gender='m';

根据name字段排序 默认升序
c)mysql> SELECT * FROM students ORDER BY name;

d)降序排序
mysql> SELECT * FROM students ORDER BY name DESC;
e)限制显示前2行:
mysql> SELECT * FROM students ORDER BY name DESC LIMIT 2;

f)偏移量为1,最大数目是2行;
mysql> SELECT * FROM students ORDER BY name DESC LIMIT 1,2;

3.3.3、WHERE clase
操作符:>、< 、>=、 <= 、 == 、!=
BETWEEN .... AND ....
基于字符串比较的
LIKE :模糊匹配
%:任意长度的任意字符
_: 任意单个字符
RLIKE :基于正则表达式匹配 (能不用就不用---基于引擎查找)
IS NULL
IS NOT NULL
条件逻辑操作: and 、or 、not
E.G
mysql> SELECT * FROM students WHERE sid>=2 and sid <=4;
mysql> SELECT * FROM students WHERE sid BETWEEN 2 AND 4;
匹配 "z" 开头字段
mysql> SELECT * FROM students WHERE name LIKE 'z%';
3.4、UPDATE
语法
UPDATE tbl_name SET col1_name=val1, col2_name=val2,... [WHERE clause] [ORDER BY 'col_name'[DESC]][LIMIT [m,]n]
e.g mysql> UPDATE students SET gender='f' WHERE sid=4;
四、DCL、用户账号及权限管理:
用户账号:'user'@'host'
user :用户名
host : 此用户访问mysqld服务时允许通过哪些主机远程创建连接
IP 、网络地址、主机名、通配符(%和_);
mysqld服务器端在验证客服端身份时,它会尝试在每一次客户端创建连接时反解客户端的IP地址为主机名,并根据主机名来检查权限 有时候明明做了授权却没法访问,可能是你根据主机名做了授权,但本机服务器却没法反解对方IP地址到主机名
因此建议 :禁止检查主机名 /etc/my.cnf
[mysqld]
skip_name_resolve=yes 跳过主机名解析
4.1、创建用户账号:
帮助:HLEP CREATE USER;
语法:
CREATE USER [IF NOT EXISTS] 'username'@'host' [IDENTIFIED BY 'password']
e.g
mysql> SELECT User,Host,authentication_string FROM user;T User,Host,aua FROM user;

4.2、删除用户:
帮助:HELP DROP USER;
语法:
DROP USER [IF NOT EXISTS] 'username1'@'host','username2'@'host',...;
4.3、授权
权限级别:管理权限、数据库、表、字段、存储例程
GRANT
帮助:
mysql> HELP GRANT;
mysql> HELP SHOW GRANTS;
查看指定用户获得的权限
mysql> SHOW GRANTS FOR 'user'@'host';
查看当前用户所拥有的的权限
mysql> SHOW GRANTS FOR CURRENT_USER;
基本语法:
GRANT priv_type,... ON [object_type] db_name.tbl_name TO 'user'@'host' [IDENTIFIED BY 'password']
注:object_type与db_name.* 类型要一致
priv_type :ALL [PRIVILEGES]、column_list
object_type: {
TABLE # 默认
| FUNCTION #存储函数上的权限
| PROCEDURE #存储过程上的权限
db_name.tbl_name :
*.* :所有库的所有表
db_name.* : 指定库的所有表
db_name.tbl_name : 指定库的指定表
db_name.routine_name :指定库的存储例程
REVOKE 回收权限:
帮助信息:
mysql> HELP REVOKE;
基本语法:
REVOKE priv_type,... ON db_name.tb_name FROM 'user'@'host';
E.G
mysql> GRANT SELECT,DELETE ON testdb.* TO 'test'@'%' IDENTIFIED BY 'test';
mysql> SHOW GRANTS FOR CURRENT_USER;

mysql> REVOKE DELETE ON testdb.* FROM 'test'@'%';

注:MariaDB服务器进程启动时会读取mysql库中的所有授权表至内存中
(1)使用GRANT或REVOKE等执行权限操作会保存在表中,MariaDB的服务进程会自动重读授权表;
(2)对于不能够或不能及时重读授权表的命令,可手动让MariaDB的服务进程重读授权表
mysql>FLUSH PRIVILEGES;
MySQL5.7 基础之二的更多相关文章
- Linux基础练习题(二)
Linux基础练习题(二) 1.复制/etc/skel目录为/home/tuer1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限. [root@www ~]# cp -r ...
- Bootstrap <基础十二>下拉菜单(Dropdowns)
Bootstrap 下拉菜单.下拉菜单是可切换的,是以列表格式显示链接的上下文菜单.这可以通过与 下拉菜单(Dropdown) JavaScript 插件 的互动来实现. 如需使用下列菜单,只需要在 ...
- RequireJS基础(二)
上一篇是把整个jQuery库作为一个模块.这篇来写一个自己的模块:选择器. 为演示方便这里仅实现常用的三种选择器id,className,attribute. RequireJS使用define来定义 ...
- Servlet基础(二) Servlet的生命周期
Servlet基础(二) Servlet的生命周期 Servlet的生命周期可以分为三个阶段: 1.初始化阶段 2.响应客户请求阶段 3.终止阶段 Servlet的初始化阶段 在下列时刻Servlet ...
- 好好写,好好干-PHP基础(二)
hi 好久没写,昨儿一写,感觉还是有人看的,至少是有一两个评论的~~好好干! 每天需要坚持的就那么4件事儿:写这个,学一点法语,看会儿书,锻炼.单身狗也有好处. 1.PHP 一.PHP基础(二) 1. ...
- php基础篇-二维数组排序 array_multisort
原文:php基础篇-二维数组排序 array_multisort 对2维数组或者多维数组排序是常见的问题,在php中我们有个专门的多维数组排序函数,下面简单介绍下: array_multisort(a ...
- MySQL基础(二)——DDL语句
MySQL基础(二)--DDL语句 1.什么是DDL语句,以及DDL语句的作用 DDL语句时操作数据库对象的语句,这些操作包括create.drop.alter(创建.删除.修改)数据库对象. 2.基 ...
- Python 基础语法(二)
Python 基础语法(二) --------------------------------------------接 Python 基础语法(一) ------------------------ ...
- JavaScript基础笔记二
一.函数返回值1.什么是函数返回值 函数的执行结果2. 可以没有return // 没有return或者return后面为空则会返回undefined3.一个函数应该只返回一种类型的值 二.可变 ...
随机推荐
- iOS - Target-Action机制创建自己的UI控件需要了解的知识
我们在开发应用的时候,经常会用到各种各样的控件,诸如按钮(UIButton).滑块(UISlider).分页控件(UIPageControl)等.这些控件用来与用户进行交互,响应用户的操作.我们查看这 ...
- Fortify漏洞之Dynamic Code Evaluation: Code Injection(动态脚本注入)和 Password Management: Hardcoded Password(密码硬编码)
继续对Fortify的漏洞进行总结,本篇主要针对 Dynamic Code Evaluation: Code Injection(动态脚本注入) 和 Password Management: Har ...
- sql强大的行转列功能(内置函数pivot及注意事项)
语法: PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PIVOT(聚合函数(列) FOR 列 in (…) ) ...
- tcpdump截帧工具使用
一.tcpdump介绍 tcpdump是Linux下功能强大的截帧工具,相当于windows下的wireshark一下,只是操作方式是命令行的,需要熟悉Linux命令行操作. 常用的Linux ...
- 解决Centos7安装python3后pip工具无法使用
问题描述: Centos7安装python3,正常流程全部配置完成,python3,pip3的软链接也建立了 但是python3可以正常使用,而pip3报错,无法找到文件或目录 解决方法: which ...
- windows IIS安装php服务及配置
windows IIS安装php服务及配置 启动IIS服务 打开 "控制面板" => "程序" => "启用或关闭Window功能&quo ...
- Python如何打印文字对应的索引
用python编写一个简单的小程序:将文字对应的索引打印出来. test=input('>>>') print(test) l=len(test) print(l) r=range( ...
- CentOS7.5安装python-pip报Error: Nothing to do解决方法
python中的一个十分好用的包管理工具python-pip是我们使用python必不可少的一件工具.但是在CentOS7安装时候却报Error: Nothing to do: [root@bnsf- ...
- 如果不用 ReSharper,那么 Visual Studio 2019 能还原 ReSharper 多少功能呢?
原文:https://blog.csdn.net/WPwalter/article/details/100158000 本文的内容分为三个部分: Visual Studio 能完全还原的 ReShar ...
- Andrew Ng机器学习 二: Logistic Regression
一:逻辑回归(Logistic Regression) 背景:假设你是一所大学招生办的领导,你依据学生的成绩,给与他入学的资格.现在有这样一组以前的数据集ex2data1.txt,第一列表示第一次测验 ...