一:链接MySQL
连接mysql
1.开启服务
1.1 打开 我的电脑 右键 服务和应用程序 服务 运行
1.2 管理员身份 运行 cmd
net start 服务名
net stop 服务名
2.连接mysql
2.1 dos命令连接
2.1.1 cmd 打开dos窗口
mysql -uroot -p123456
2.1.2 cmd 打开dos窗口
mysql -uroot -p
Enter password: ******
2.2 直接使用mysql的客户端
2.3 使用ide工具
2.4 JDBC
二:MySql的基本操作
一.登陆到mysql数据库
mysql -uroot -p123456
二.常见操作
2.1 展示所有的数据库
show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
2.2 创建数据库
create database A;
Query OK, 1 row affected (0.00 sec) 成功
2.3 创建表
-- ERROR 1046 (3D000): No database selected
-- 先有库 才能有表 表必须创建在数据库中,先选择数据库在创建表
-- 选择数据库
use 数据库名字;
use A;
Database changed
-- varchar(20) 字符串
create table 表名(
字段名 字段类型,
字段名 字段类型,
.....
最后字段 字段类型
);
create table A1(
id int,
sname varchar(20)
);
create table a2(id int,
age int,
salary double,
sname varchar(20)
);
2.4 -- 展示当前库内所有的表
show tables;
2.5 -- 向表内添加数据
insert into 表名 values(字段值1,字段值2);
insert into a1 values(1,'zs');
insert into a1 values(2,'ls');
insert into a2 values (1,20,456.7,'wanganshi');
insert into a2 values (2,22,456.7,'lishangyin');
2.6 -- 获取表内的数据
select * from a1;-- 获取a1表内所有的数据
select * from a1;
+------+-------+
| id | sname |
+------+-------+
| 1 | zs |
| 2 | ls |
+------+-------+
select * from a2;
+------+------+--------+------------+
| id | age | salary | sname |
+------+------+--------+------------+
| 1 | 20 | 456.7 | wanganshi |
| 2 | 22 | 456.7 | lishangyin |
+------+------+--------+------------+
三.中文乱码
insert into a1 values(3,"李白");
-- 显示mysql的编码
show variables like 'character%';
+--------------------------+-----------------------------------------+
| Variable_name | Value |
+--------------------------+-----------------------------------------+
| character_set_client | gbk |
| character_set_connection | gbk |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | gbk |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | C:\install\mysql\server\share\charsets\ |
+--------------------------+-----------------------------------------+
3.1解决一:在创建数据库时指定编码
create database B charset 'utf8';
use B;
create table B1(
id int,
sname varchar(20)
);
insert into B1 values(1,"李白");
select * from b1;
3.2解决二:一劳永逸解决不能插入中文问题(找到安装目录"C:\install\mysql\data\my.ini")
3.2.1 去掉 66 99 行 # 在等号后面写 utf8
default-character-set=utf8
character-set-server=utf8
3.2.2 关闭mysql 重启服务
(此时乱码问题已经解决了但对于已经创建好的数据库,不受影响,需要新建数据库进行测试)
3.2.3 再次创建数据库进行测试
create database c;
use c;
create table C1(
id int,
sname varchar(20)
);
insert into C1 values(1,"李白");
注意:
对my.ini的修改 对以后创建的数据库有效 对之前的没有效果
三:mysql的数据类型
一.整型数据类型
int 有符号 有正负
无符号 unsigned 没有负数只有正数 最小值是0
int(数值) 宽度(需要和unsigned 一起使用,否则无意义)
zerofill: 当 数据长度不够宽度 补0 当超过宽度 那就存指定的值
create database variabletype;
use variabletype;create table inttest(
id int,
id2 int(4)
);
insert into inttest values(1,1);
insert into inttest values(10000,10000);select * from inttest;
create table inttest2(
id int,
id2 int(4) unsigned zerofill -- id2 是无符号的值 宽度为4 不够宽度 用0补齐
);
insert into inttest2 values(-1,-1); --最小值是0不能添加
insert into inttest2 values(-1,1);
+------+------+
| id | id2 |
+------+------+
| -1 | 0001 |
+------+------+
insert into inttest2 values(-10000,10000);
三:浮点型
浮点类型:
create table doubletest(
height double,
salary double(5,2)-- 最多有五个数字 其中两位小数
);
double: 能存最大的小数
如果小数位数过长 无法精确表示
double(m,n): m 最多多少位 n 小数的个数
当小数的位数过长 会舍弃并四舍五入例如 double(5,2)表示总共有5位,小数部分占2位。
insert into doubletest values(3.14,6.28);
insert into doubletest values(3.144,6.281);
insert into doubletest values(33333.144,66666.281);
insert into doubletest values(33333.144,666.281);
insert into doubletest values(33333.144,666.289);
insert into doubletest values(3.333333333333333333333333333,666.289);
select * from doubletest;
mysql> select * from doubletest;
+--------------------+--------+
| height | salary |
+--------------------+--------+
| 3.14 | 6.28 |
| 3.144 | 6.28 |
| 33333.144 | 666.28 |
| 33333.144 | 666.29 |
| 3.3333333333333335 | 666.29 |
+--------------------+--------+
-- decimal 可以表示更精确的小数
decimal 没写宽度 只保留整数 且会对小数进行四舍五入(自己测试默认宽度是10 decimal(10,0))
decimal(20,18) 一共有20位 18位是小数 小数位数不足 补0
create table decimaltest(
id decimal,
id2 decimal(20,18)
);
insert into decimaltest values(3.14,3.666);
insert into decimaltest values(3.64,3.666);
insert into decimaltest values(3.64,3.111111111111111111);
select * from decimaltest;
+------+----------------------+
| id | id2 |
+------+----------------------+
| 3 | 3.666000000000000000 |
| 4 | 3.666000000000000000 |
| 4 | 3.111111111111111111 |
+------+----------------------+
bit:会将值转为二进制进行存储
如果不写宽度 只能存一个值
写宽度 就可以存宽度个值
进行读取时 使用 bin()进行解析create table bittest(
id bit,
id2 bit(3)
);
insert into bittest values(1,1);
insert into bittest values(1,20);
select bin(id),bin(id2) from bittest;
四:日期类型
7.日期类型
create table datetest(
y year,-- 年
d date,-- 年月日
t time,-- 时分秒
dt datetime, -- 年月日 时分秒
tt timestamp -- 年月日 时分秒 随着时区的变化 自动变化);
-- 新增数据 now() 获取当前时间
insert into datetest values(now(),now(),now(),now(),now());
-- 获取结果
select * from datetest;
select * from datetest;
+------+------------+----------+---------------------+---------------------+
| y | d | t | dt | tt |
+------+------------+----------+---------------------+---------------------+
| 2021 | 2021-11-08 | 14:53:25 | 2021-11-08 14:53:25 | 2021-11-08 14:53:25 |
+------+------------+----------+---------------------+---------------------+
-- 更改时区到东九区
set time_zone='+9:00';
set time_zone='+8:00';
select * from datetest;
+------+------------+----------+---------------------+---------------------+
| y | d | t | dt | tt |
+------+------------+----------+---------------------+---------------------+
| 2021 | 2021-11-08 | 14:53:25 | 2021-11-08 14:53:25 | 2021-11-08 15:53:25 |
+------+------------+----------+---------------------+---------------------+
insert into datetest values('2023','2024-2-8','19:38:46','2024-12-3 13:23:45','2025-12-3 13:23:45');
select * from datetest;
+------+------------+----------+---------------------+---------------------+
| y | d | t | dt | tt |
+------+------------+----------+---------------------+---------------------+
| 2021 | 2021-11-08 | 14:53:25 | 2021-11-08 14:53:25 | 2021-11-08 14:53:25 |
| 2023 | 2024-02-08 | 19:38:46 | 2024-12-03 13:23:45 | 2025-12-03 13:23:45 |
+------+------------+----------+---------------------+---------------------+
select y '年',d '年月日',t '时分秒',dt '年月日时分秒' , tt '年月日时分秒与时区有关' from testdate;
+------+------------+----------+---------------------+------------------------+
| 年 | 年月日 | 时分秒 | 年月日时分秒 | 年月日时分秒与时区有关 |
+------+------------+----------+---------------------+------------------------+
| 2021 | 2021-11-08 | 20:51:44 | 2021-11-08 20:51:44 | 2021-11-08 20:51:44 |
+------+------------+----------+---------------------+-----------------------
五:字符类型/enum/set类型
一.创建表
/*
char 如果没有写宽度 那么只能存一个字符 固定长度字符串
varchar 都是字符串 可变长度字符串
注意:
1.字符串既可以使用单引号 也可以使用 双引号
2.varchar 使用时必须指明宽度
*/
create table charTest(
sex char,
s char(20),
sname varchar(20)
);
insert into charTest values('男',"李白",'王安石');
insert into charTest values('男的',"李白",'王安石');
create table charTest1(
sex char,
s char(20),
sname varchar(20)
);
-- enum 规定该字段的值仅有 有限的几个值
create table enumtest(
id int,
sname varchar(20),
sex enum('男','女'));
insert into enumtest values(1,'李白','男');
insert into enumtest values(2,'李清照','女');
select * from enumtest;
+------+--------+------+
| id | sname | sex |
+------+--------+------+
| 1 | 李白 | 男 |
| 2 | 李清照 | 女 |
+------+--------+------+
2 rows in set (0.00 sec)
--insert into enumtest values(2,'李白','男的');
--ERROR 1265 (01000): Data truncated for column 'sex' at row 1
-- set
-- 规定了字段的值仅有有限的几个
-- 输入值的方式 '读书,登山'
-- 也可以采用 数字相加 9 2^0 开始是第一个值
-- set 里面最多有64个值
create table settest(
id int,
sname varchar(20),
-- 1 2 4 8 16
hobby set('读书','写代码','打游戏','登山','游泳'));
insert into settest values(1,'张三','读书');
insert into settest values(1,'张三','看报');-- 错误的 没有看报
insert into settest values(1,'张三','读书','登山');insert into settest values(1,'张三','读书,登山');
insert into settest values(2,'李四',3);-- 读书,写代码
insert into settest values(2,'王安石',4);-- 打游戏
insert into settest values(3,'安琪拉',2);
insert into settest values(4,'汉子哥',1);
insert into settest values(5,'嬴政',6);
insert into settest values(5,'嬴政',15);
六:MySql语法规范
/*
1. mysql 不区分大小写展现mysql 核对规则
show variables like 'colla%'; ci 结尾 不区分大小写 (默认ci结尾)
+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | gbk_chinese_ci |
| collation_database | utf8_general_ci |
| collation_server | utf8_general_ci |
+----------------------+-----------------+
2. 对数据库名 表名 字段名命名时 见名之意 26 英文 数字 下划线3. 不要使用 关键字 如果非要使用 可以使用 飘号包裹 ``
4. 一个DBMS内 可以有多个数据库 但是各个数据库不能重名
一个数据库内可以有多张表 但是各个表不能重名
一个表可以有多个字段 但是各个字段不能重名
5. 起别名
字段的后面 as 别名的名称 as 可以省略
如果有特殊字符 需要使用 引号 将 别名进行包裹
6.标点符号 必须是英文半角7.注释
-- 单行注释
# 单行注释
/* * / 多行注释
*/create table c(
age int,
age double
);
create database a;-- 获取datetest 中所有的数据
select * from datetest;-- 获取datetest y dt 字段的数据
select y,dt from datetest;select y as '年份' ,dt 年月日时分秒 from datetest;
-- 如果有特殊字符 需要使用 引号 将 别名进行包裹
select y as '年份' ,dt '年月日 时分秒' from datetest;
七:Sql语言的分类
DDL: 数据库定义语言 创建库 创建表 删除库 删除表 添加字段 删除字段....
(用于操作数据库和表的语言,并非直接操作数据)
DML:数据库操纵语言 对数据的 增删改
DQL: 数据库查询语言 查
DCL: 数据库控制语言 事务控制 权限管理
-- 展示所有的库
show databases;
DDL语言
-- 创建数据库
create database 数据库名;
create database e;
-- 删除库drop database 数据库名;
drop database b;
-- 创建表
create table ctest(id int,
sname varchar(20)
);-- 展示所有的表
show tables;
-- 删除表
drop table 表名;
drop table ctest;
-- 展示建表语句
show create table bittest;
CREATE TABLE `bittest` (
`id` bit(1) DEFAULT NULL,
`id2` bit(3) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
DDL下
-- 展现对表中字段的操作
-- 列的定义 : 列的名字+列的类型
create table ctest(
id int,
sname varchar(20));
desc ctest;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| sname | varchar(20) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+-- 添加数据
insert into ctest values(1,"李白");
-- 查看数据select * from ctest;
insert into ctest values(2,"李白",20);
-- 添加字段
-- ALTER TABLE tbl_name ADD 列的定义 [FIRST | AFTER col_name ]
-- 默认添加到最后 也可以指定 添加到那个位置
alter table ctest add age int;alter table ctest add salary double after sname;
desc ctest;
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| sname | varchar(20) | YES | | NULL | |
| salary | double | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+--------+-------------+------+-----+---------+-------+-- 删除字段
-- ALTER TABLE tbl_name DROP [COLUMN] col_name
-- 删除 sname 字段
alter table ctest drop sname;
-- 删除 age 字段
alter table ctest drop COLUMN age;desc ctest;
+--------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+---------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| salary | double | YES | | NULL | |
+--------+---------+------+-----+---------+-------+-- 修改字段
-- 修改名字 及类型-- ALTER TABLE tbl_name CHANGE [COLUMN] old_col_name column_definition [FIRST|AFTER col_name]
alter table ctest change id id2 int(5) after salary;alter table ctest change salary s2 double(5,3);
desc ctest;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| s2 | double(5,3) | YES | | NULL | |
| id2 | int(5) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
-- 修改类型
-- ALTER TABLE tbl_name MODIFY column_definition [FIRST|AFTER col_name];
alter table ctest modify s2 double;-- 修改表名
-- ALTER TABLE tbl_name RENAME [TO] new_tbl_name;alter table ctest rename person;
DML(完成对表格数据的新增)(重要)
-- 一.完成对表格数据的新增
create table dog(
id int,
dname varchar(20),
sex char
);
-- insert into 表名 values (字段值1,字段值2......);
insert into dog values(1,"旺财",'公');
insert into dog values(2,"小黑",'公');
-- 批量添加
insert into dog values(3,"小花","母"),(4,"小白","母"),(5,"小红","母");
-- 给指定的字段赋值
-- insert into 表名(字段名1,字段名2.。。。) values (字段值1,字段值2......)
insert into dog(id,sex)values(6,'公');
insert into dog(id,sex)values(7,'公'),(8,'公'),(9,'公');
-- 插入给指定的字段赋值
-- insert into 表名 set 字段名 = 字段值,字段名 = 字段值...;
insert into dog set sex ='公';
insert into dog set dname ='小土';
insert into dog set id = 10, dname = '来福';
-- 二.更新update 表名 set 字段名 = 字段值 [where] 筛选条件;
如果没有筛选条件 那么 修改整张表所有的数据
如果有筛选条件 那么 只修改满足筛选条件的数据
-- 将 id =1 的 数据 名字改为 666
update dog set dname = '666' where id =1;
-- 全部修改
update settest set id = 6;