mysql数据库1—数据库基本命令
1.mysql的shell命令
1.登录mysql(进入mysql安装目录bin目录下,打开cmd):
(1)mysql -u用户名 -p用户密码
(2)mysql -u用户名 -p #不输密码也可,但回车后提示你输入密码
2.退出mysql环境,三种都是一样的效果:
(1)exit
(2)quit
(3)\q
3.查看服务器的状态信息:
(1)status;
4.显示当前mysql的version的各种信息(可在客户端的查询窗口使用)
(1)select version();
5.查看MySQL端口号(可在客户端的查询窗口使用)
(1)show global variables like 'port';
6.显示数据库列表(可在客户端的查询窗口使用)
(1)show databases;
7.显示数据表的结构(可在客户端的查询窗口使用)
(1)describe 表名;
2.创建数据库
1.语法:create database 数据库名
2.例子:create database test01
3.删除数据库
#IF EXISTS是用于防止当数据库不存在时发生错误,可不填
1.语法:DROP DATABASE IF EXISTS 数据库名
2.例子:DROP DATABASE IF EXISTS test01
4.创建数据库表
1.语法:CREATE TABLE 表名字(字段列表)
2.例子:
CREATE TABLE `user_info` (
`id` int(100) NOT NULL AUTO_INCREMENT COMMENT '主键id',
`phone` varchar(20) NOT NULL DEFAULT '' COMMENT '手机号码',
`pass_word` varchar(32) NOT NULL DEFAULT '' COMMENT '用户密码',
`type` tinyint(32) NOT NULL DEFAULT 0 COMMENT '用户类型:0-不需要重置密码;1-需要重置密码',
`create_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
PRIMARY KEY (`id`) USING BTREE,-- 设置id为主键
KEY `phone` (`phone`) USING BTREE,-- 设置索引
KEY `phoneAndPassword` (`phone`,`password`) USING BTREE -- 设置联合索引
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
-- AUTO_INCREMENT:自增标识
-- CURRENT_TIMESTAMP:默认当前时间
-- CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP:默认当前时间,并使用update时,随着记录的更新该字段自动变化
-- USING BTREE:使用BTREE索引
-- ENGINE=InnoDB:使用InnoDB引擎
-- DEFAULT CHARACTER SET utf8mb4:数据库字符集。设置数据库的默认编码为utf8mb4
-- COLLATE=utf8mb4_general_ci:数据库校对规则,比较和排序,不区分大小写
5.删除表
#IF EXISTS用于防止当数据表不存在时发生错误,可不填
#DROP TABLE 可以同时删除多个表,只要将表名依次写在后面,相互之间用逗号隔开即可
1.语法:DROP TABLE IF EXISTS 表名1,表名2,表名3
2.例子:DROP TABLE user_info
6.增删改查
(1)SELECT
SELECT 语句用于从表中选取数据。
1.语法:
语法1:SELECT 列名称 FROM 表名称
语法2:SELECT * FROM 表名称
2.例子:SELECT * FROM user_info
(2)UPDATE
Update 语句用于修改表中的数据。
1.语法:UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
2.例子:UPDATE user_info SET phone = '18318xxxx89' WHERE id = 1
(3)INSERT
INSERT INTO 语句用于向表格中插入新的行。
1.语法
语法:INSERT INTO 表名称 VALUES (值1, 值2,....)
语法:INSERT INTO 表名称 (列1, 列2,...) VALUES (值1, 值2,....)
2.例子:INSERT INTO user_info ('phone','pass_word')VALUES ('18318xxxx89','123456');
(4)DELETE
DELETE 语句用于删除表中的行。
1.语法:DELETE FROM 表名称 WHERE 列名称 = 值
2.例子:DELETE FROM user_info WHERE id = 1
(5)WHERE
WHERE 子句用于规定选择的标准。
1.语法:SELECT 列名称 FROM 表名称 WHERE 列 运算符 值
2.例子:
-- 从表 User 中选出 name 字段是'小林'的数据
SELECT * FROM User WHERE name = '小林';
(6)AND 和 OR
AND - 如果第一个条件和第二个条件都成立;
OR - 如果第一个条件和第二个条件中只要有一个成立;
AND例子:
-- 删除表 User 中字段id=1 并且 字段user_id=8 的数据
DELETE from meeting where id = 1 and user_id = 8;
OR例子:
-- 查询表 User 中名字为"小林" 或者 名字为"小张"的人
SELECT * FROM User WHERE name='小林' OR name='小张';
(7)ORDER BY
语句默认按照升序对记录进行排序。
ORDER BY - 语句用于根据指定的列对结果集进行排序。
DESC - 按照降序的顺序对记录进行排序。
ASC - 按照升序的顺序对记录进行排序。
例子:
-- 对表 User 中字段 age 进行排序
SELECT name,age FROM User ORDER BY age;
-- 后面跟上 DESC 则为降序显示
SELECT name,age FROM User ORDER BY age DESC;
-- 名字以降序显示公司名称,并年龄以顺序显示
SELECT name,age FROM User ORDER BY age ORDER BY name DESC, age ASC;
(8)IN
IN - 操作符允许我们在 WHERE 子句中规定多个值。
IN - 操作符用来指定范围,范围中的每一条,都进行匹配。IN取值规律,由逗号分割,全部放置括号中。
语法:SELECT "字段名"FROM "表格名"WHERE "字段名" IN ('值一', '值二', ...);
例子:
-- 从表 User 选取 字段 name 等于 '小林'、'小张'
SELECT * FROM User WHERE name IN ('小林','小张');
(9)NOT
NOT - 操作符总是与其他操作符一起使用,用在要过滤的前面
例子:
-- 查询表 User 中不是小林的所有记录
SELECT * FROM User WHERE NOT name = '小林';
(10)UNION
UNION - 操作符用于合并两个或多个 SELECT 语句的结果集。
例子:
-- 列出所有在用户日志表1(User_Log1)和用户日志表2(User_Log2)的不同的用户名
SELECT name FROM User_Log1 UNION SELECT name FROM User_Log2
-- 列出 User 表中的 id,name,任务表 Task 中的id,task_name 别名设置成 name 避免字段不一样报错,按更新时间排序
SELECT id,name FROM User UNION ALL SELECT id,task_name AS name FROM Task ORDER BY update_at;
(11)AS
as - 可理解为:用作、当成,作为;别名
一般是重命名列名或者表名。
语法:select column_1 as 列1,column_2 as 列2 from table as 表
例子:
-- 这句意思是查找所有User表里面的数据,并把User表格命名为 u
SELECT * FROM User AS u。
-- 列出表 User 中字段age列最大值,结果集列不显示 age,显示 中文‘年龄’
SELECT MAX(age) AS '年龄' FROM User;
(12)JOIN
用于根据两个或多个表中的列之间的关系,从这些表中查询数据
JOIN: 如果表中有至少一个匹配,则返回行
INNER JOIN:在表中存在至少一个匹配时,INNER JOIN 关键字返回行。
LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
FULL JOIN: 只要其中一个表中存在匹配,就返回行
例子:
SELECT u.name from User u
left join User_Role ur on u.user_id = ur.user_id
left join Role r on r.role_id = ur.role_id
7.SQL基本 函数
(1)COUNT
COUNT 计算数据库表中有多少行数据,NULL值不计入,比如count计算某字段,不计算那字段null值那一行
语法:SELECT COUNT("字段名") FROM "表名";
例如: select count(*) from User;
(2)MAX
MAX 函数返回一列中的最大值。NULL 值不包括在计算中。
语法:SELECT MAX("字段名") FROM "表格名"
例如:select MAX('name') from User;
8.创建后表的修改
(1)添加列
语法:alter table 表名 add 列名 列数据类型 [after 插入位置];
例子:
-- 在表User的最后追加列 address
alter table User add address char(60);
-- 在表User中名为 name 的列后插入列 age:
alter table User add age int(3) not null default 0 after name;
-- 在表User中名为age的列后插入列birthday:
alter table User add column birthday date after age;
(2)修改列
语法:alter table 表名 change 列名称 列新名称 新数据类型;
例子:
-- 将表 User 中 phone 列改名为 telphone
alter table User change phone telphone char(13) default "-";
-- 将表 User 中 name 列的数据类型改为 char(16):
alter table User change name name char(20) not null;
-- 修改表 User 中 name 的备注,COMMENT 前面必须得有类型属性
alter table User change name name char(25) COMMENT '这里是名字';
-- 修改表 User 中字段age的属性,修改列属性的时候 使用modify
alter table User modify age varchar(20) NOT NULL DEFAULT "" COMMENT "";
(3)删除列
语法:alter table 表名 drop 列名称;
-- 删除表 User 中的 birthday 列:
alter table User drop birthday;
(4)重命名表
语法:alter table 表名 rename 新表名;
例子:
-- 重命名 User 表为 Sys_User:
alter table User rename Sys_User;
(5)清空表数据
-- DELETE方法为DML语言,可以回退,可以有条件的删除
-- TRUNCATE方法为DDL语言,无法回退,默认所有的表内容都删除,删除速度比delete快
方法一:delete from 表名;
方法二:truncate table "表名";
例子:
delete from User where user_name = '小林';
truncate table User;