Mysql基础操做及增删改查mysql
mysql -e "show databases \G" 显示到shell上sql
如:help create
若是须要进一步获取帮助,能够继续使用help命令
如:help create databaseshell
系统数据库
information_schema: 虚拟库,存放在内存中,主要存储了系统中的一些数据库对象信息,如用户表信息,列信息,权限信息,字符信息等.
performance_schema: 主要存储数据库服务器的性能参数
mysql: 受权库,主要存储系统用户的权限信息
test: 公共库,任何人都能访问,Mysql数据库自动建立的测试数据库
sys: 系统的元数据信息,方便DBA发现数据库的不少信息,为解决性能瓶颈体用了巨大帮助数据库
create database 数据库名 character set = 'utf8' collate=utf8_general_ci; 数据库命名规则: 1>能够由字母,数字,下划线,@,#,$ 2>区分大小写 3>惟一性 4>不能使用关键字如create select 5>不能单独使用数字 6>最长128位
# 数据表里存放什么样的数据就选取相应的字符集: 简体中文的字符集是gb2312和gbk: utf8是国际通用字符集 show character set; # 查看Mysql支持的字符集 show collation; # 查看字符集的排序规则,utfs-generic支持大多数的排序规则 create database db character set = 'utf8mb4' collate=utf8_general_ci; # 建立数据库设置字符编码和字符集的排序规则 show create database db\G; # 查看db数据库字符编码 alter database db character set = latin1 # 修改数据库的字符编码 use 库名; # 切换数据库 show databases; # 查看全部的库 drop database # 删除数据库
Mysql常见的数据类型安全
在Mysql数据库管理系统中,能够经过存储引擎来决定表的类型,同时,Mysql数据库管理系统也提供了数据类型决定表存储数据的类型,数值类型越大对于内存的消耗越多,合适的数据类型在必定程度上能增长数据库的效率.服务器
Mysql数据库管理系统提供的数据类型框架
数据类型的经常使用场景函数
语法:性能
create table 表名( 字段名1 类型[(宽度)约束条件] 字段名2 类型[(宽度)约束条件] ... )[存储引擎 字符集]; # 说明: 在同一张表中,字段名和类型是必须有的,且字段名是不能相同; # 中括号里面的宽度和约束条件可选,整数类型不须要指定宽度,其余的浮点型和定点型等须要指定宽度,也就是约束条件。
表school.student1 字段 字段 字段 字段 id name sex age 1 tom male 23 记录 2 jack male 21 记录 3 alice female 19 记录 # 建立库 mysql> create database school; # 建立表 create table school.student1 (id int,name varchar(50),sex enum('male','female'),age int);
Example
create table student(stu_id INT NOT NULL AUTO_INCREMENT, name CHAR(32) NOT NULL, age INT NOT NULL, register_date DATE, PRIMARY KEY(stu_id) );测试
# 注意: 先看表的结构再去插值,插值的时候数字不须要用引号,字符串必需要用双引号或者是单引号引发来; # 语法: insert into 表名(字段1,字段2...) values(字段值列表...) # 顺序插入多个记录,不用指定字段名,此处指的顺序并不是是id数字,而是插入的值和前面的字段是对应的; mysql> insert into student1 values (1,'tom','male',23), (2,'jack','male',21), (3,'alice','female',19); # 修改表 # 修改表名 mysql> alter table student1 rename student2; 1.插入完整数据(顺序插入) 语法一: insert into 表名(字段1,字段2,字段3..字段n) values(值1,值2,值3); 语法二: insert into 表名 values (值1,值2,值3..值n); 2.指定字段插入数据 语法一: insert into 表名(字段1,字段2) values (值1,值2); 3.插入多条记录使用逗号隔开 语法一: insert into 表名 values(值1,值2,值3),(值1,值2,值3..值n),(值1,值2,值3 ); 4.插入查询结果 语法一: insert into 表1(字段1,字段2,字段3...字段n) select (字段1,字段2,字段3) FROM 表2 WHERE ...;
Example
insert into student(name,age,register_date)values("youmen",21,"2020-02-12");
mysql> show table; # 查看库中已有的表 # 查看表结构 mysql> desc student1; mysql> show create table student1; # 查询表中指定字段的值 mysql> select id,name,sex from student1\G; mysql> select * from student1; # 查询表中全部字段的值,由于尚未插入字段,因此查询到数据都是空的 # 聚合查询 # 查询一个表中有多少条记录,可使用SQL内置的count()函数查询~~~~ select count(*) from students;
# 语法: update 表名 SET 字段1=值1,字段2=值2... WHERE CONDITION; # 表的修饰符 # not null 标识该字段不能为空 # default 为该字段设置默认值 mysql> update student2 set name='flying' where id=2; # 匹配id=2的哪一行,并将name字段换成flying; mysql> update student2 set name='flying' where d=3 and sex='female'; # 此处and也能够是or # 添加字段 mysql> alter table student2 add id int(3) not null default 22, add gender enum('M','WW');
mysql> drop table 表名,表名; mysql> drop table IF EXISTS student2; # 这个表存在就删除,不存在也不会报错,能够删除脚本使用 # 删除字段/表 delete FROM 表名 [where condtion]; mysql> alter table student2 drop id; mysql> delete from student2; mysql> delete from mysql.user where authentication_string=''; # 出于安全考虑将表中没有密码的删掉 mysql> delete from student2 where id=2 and name='flying'; # 匹配到id=2而且name=flying的删掉此类数据
一、单列查询去重:select distinct 字段名 from 表名; (distinct为去重) 二、查询同时运算:select 字段名(数据类型为数字)*14 from 表名; 三、 改变表头输出:select 字段名(数据类型为数字)*14 as(能够省略) 新表头 from 表名; eg: mysql> select name from student; +-------+ | name | +-------+ | zhou | | alice | +-------+ mysql> select CONCAT("name:",name)as message from student; +------------+ | message | +------------+ | name:zhou | | name:alice | +------------+
如下为操做符列表,可用于WHERE子句中。
下表中实例假定A为10,B为20
操做符 | 描述 | 实例 |
---|---|---|
= | 等号,检测两个值是否相等,若是相等返回true | (A = B) 返回false。 |
<>, != | 不等于,检测两个值是否相等,若是不相等返回true | (A != B) 返回 true。 |
> | 大于号,检测左边的值是否大于右边的值, 若是左边的值大于右边的值返回true | (A > B) 返回false。 |
< | 小于号,检测左边的值是否小于右边的值, 若是左边的值小于右边的值返回true | (A < B) 返回 true。 |
>= | 大于等于号,检测左边的值是否大于或等于右边的值, 若是左边的值大于或等于右边的值返回true | (A >= B) 返回false。 |
<= | 小于等于号,检测左边的值是否小于于或等于右边的值, 若是左边的值小于或等于右边的值返回true | (A <= B) 返回 true。 |
一、单条件查询:where select 字段 from 表名 where 条件判断; select 字段 from 表名 where 条件判断 and 条件判断; select 字段 from 表名 where 条件判断(between A and B); --> 范围 eg: select name from haha where id between 0 and 2; +------+ | name | +------+ | ljt | +------+ 1 row in set (0.00 sec) SELECT name, salary FROM employee5 WHERE salary NOT IN (4000,5000,6000,9000) ; SELECT name,job_description from employee5 where job_description is null;(字段为空) SELECT * FROM employee5 WHERE name LIKE 'al%'; %表明多个字符 SELECT * FROM employee5 WHERE name LIKE 'al___'; --> "_"下划线表明一个字符 正则:' = ' 精确匹配;'like' 模糊查询; ' regexp '正则查询 select * from student where register_date > '2020-02-13'; # 使用主键来做为WHERE子句的条件查询是很是快速的.
二、排序:order by 字段(通常此字段都是数字,排个成绩啥的)
单列:默认升序,在末尾加DESC则变为降序;
eg:
mysql> select id from haha order by id ;
+----+
| id |
+----+
| 1 |
| 2 |
| 3 |
| 4 |
+----+
4 rows in set (0.00 sec)
mysql> select id from haha order by id DESC; +----+ | id | +----+ | 4 | | 3 | | 2 | | 1 | +----+ 4 rows in set (0.00 sec) 多列:先按第一条件,在第一条件框架中再按第二条件 eg: mysql> select id from haha order by money,id;
先用order排序,再使用limit 3,5; eg: SELECT * FROM employee5 ORDER BY salary DESC LIMIT 3,5;
SELECT 字段1 FROM employee5 GROUP BY 字段2;---按字段2分组,字段2中值相同的记录被分为一组。 group_concat函数能够将分完组以后的,某一组的某个字段以列表方式打印出来。 eg: SELECT dep_id,group_concat(name) FROM employee5 GROUP BY dep_id; 过程解析:一、分组:先以dep_id字段为分组标准进行分组,dep_id字段相同的行被分为一组, 二、打印:使用group_concat函数调用name字段,将每一个组中全部行的"name"字段作成一个列表,将此列表看做为一个值,进行打印;
多表查询
交叉连:笛卡尔积
eg:select a,b from info,departtment;
只有当info表,departtment表都包含
内外链接区别:内链接只能显示出两表中符合条件的字段
外链接能够显示主表的所有字段,未能匹配到副表的显示null
内链接:SELECT 字段列表 FROM 表1 ,表2 WHERE 表1.字段 = 表2.字段; eg:select info.name,info.age,info.dep_num,department.dep_num from info,department where info.dep__num = department.dep_num;
外链接: 左链接:select info.name,info.age,info.dep_num,department.dep_name from info left join department on info.dep_num = department.dep_num; ~~~~~~ ~~~~ , where 右链接: