标签:string where 分隔符 超出 名称 key 指定 rip 服务器
Mysql基础操作及增删改查
mysql -e "show databases \G" 显示到shell上
如:help create
如果需要进一步获取帮助,可以继续使用help命令
如:help create database
系统数据库
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的删掉此类数据
1、单列查询去重:select distinct 字段名 from 表名; (distinct为去重)
2、查询同时运算:select 字段名(数据类型为数字)*14 from 表名;
3、 改变表头输出: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。 |
1、单条件查询: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子句的条件查询是非常快速的.
2、排序: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;
过程解析:1、分组:先以dep_id字段为分组标准进行分组,dep_id字段相同的行被分为一组,
2、打印:使用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
右连接:
标签:string where 分隔符 超出 名称 key 指定 rip 服务器
原文地址:https://www.cnblogs.com/you-men/p/12838181.html