mysql基础代码

目录

一.数据库基础代码

二.数据类型

1、数值

2、字符串

3.日期

4.null

三.数据库的字段属性

四。修删表

1.修改

2.删除


一.数据库基础代码

mysql -h  主机号 -P 3306 -u 用户名 -p密码 //P 端口 MySQL登录
show databases; //查看所有的数据库

use 表名 :切换到数据库

show tables; //展示当前数据库下的表单名

Ctrl +c 强行终止

describe 表名 :查看当前表内容

create database studnet1; //创建表

exit;//退出

-- 单行注释

/*

*/ 多行注释

drop database 数据库名 : 移除数据库

所有的语句封号结尾

==========================================

二.数据类型

1、数值

1.tinyint 十分小的数据,只占一个字符

2.smallint  较小的数据,2个字节

3. int           标准的数据             4个字节 

4.mediumint   中等大小的数据   3个字节

5. bigint   较大的数据    8 个字节

6.float    浮点数   4个字节

7.double   浮点数   8个字节

8.decimal   字符串形式浮点数   金融计算会用到

2、字符串

1.varchar 可变字符串  0-65535

2. char  字符串固定大小  0-255

3.tinytext  微型文本  2^8 -1

4.text     文本串   2^16 -1   //保存大文本

3.日期

1.datetime  日期和时间加到一起

2.timestamp  时间戳  1970.1.1到现在的毫秒数 

3.year   年份表示

4.null

不要用null计算任何数与null计算都是null

三.数据库的字段属性

1.填充零  不足的位数用零填充   int(3)5 ----005

2.自动递增  自动在上一条记录加一,必须是整数类型

3.无符号  声明该数据不能为负数

4.非空 勾了的就必须填值,不勾可以不写,默认是null

CREATE TABLE `ss` ( //表名与括号有空格 结尾用“;” “`”表名,字段名用这个
`id` int(4) NOT NULL,
`NAME` VARCHAR(50) NOT NULL
);

MySQL的引擎默认是InnoDB 

四。修删表

1.修改

ALTER TABLE ss RENAME AS hailmyfuther //修改表名中间不能有空格,旧的在前,新的在后
             
alter table  hailmyfuther modify id varchar(11); --修改约束

 alter table  hailmyfuther change id varchar(11); --字段重命名

ALTER TABLE hailmyfuther ADD ages INT(11) --删除表的字段名

2.删除

drop table stu_info;

 ============================================

五.DML语言

1.插入

INSERT INTO `WAR`(`tanks`) VALUES('虎式')

//插入多条语句
INSERT INTO `WAR`(`tanks`) VALUES('四号'),('美洲豹'),('鬣狗')

/*
ERROR 1364 (HY000): Field 'tanks' doesn't have a default value

因为NOT NULL被勾选所以必须要有值,解决的话就不要勾NOT NULL

*/

2.修改

update WAR set tanks ='三秃子' where tanks = '三号';

 update WAR set plane ='彗星1',tanks ='彪马' where id >='4'; //id大于4或等于4

 update WAR set plane ='彗星2',tanks ='齐柏林' where id between 2 and 4; // 在2和4之间

update WAR set plane ='俾斯麦',tanks ='小齐柏林' where id = '1'and'4'; //是id1和4

3.删除 

 delete from WAR where id = '10'; //删除制定数据

 truncate hailmyfuthe; //清空表里的数据

*/mysql错误:Column count doesn't match value count at row 1 是因为列和数值不匹配

  所以要 insert into test(id,coll) values('1','2');

六.查询语言

1.select查询语句

 select * from WAR;//查找所以字段
+------+----------+----------+------+
| id   | tanks    | plane    | wuqi |
+------+----------+----------+------+
|    1 | 小齐柏林 | 俾斯麦   |      |
|    2 | 欧根     | 提尔比茨 |      |
|    3 | 齐柏林   | 彗星2    |      |
|    4 | 齐柏林   | 彗星2    |      |
|    5 | 彪马     | 彗星1    |      |
|    6 | 彪马     | 彗星1    | NULL |
|    7 | 彪马     | 彗星1    | NULL |
|    8 | 彪马     | 彗星1    | NULL |
|    9 | 欧根     | 提尔比茨 | 98K  |
+------+----------+----------+------+

 select tanks,plane from WAR;//查询指定字段
+----------+----------+
| tanks    | plane    |
+----------+----------+
| 小齐柏林 | 俾斯麦   |
| 欧根     | 提尔比茨 |
| 齐柏林   | 彗星2    |
| 齐柏林   | 彗星2    |
| 彪马     | 彗星1    |
| 彪马     | 彗星1    |
| 彪马     | 彗星1    |
| 彪马     | 彗星1    |
| 欧根     | 提尔比茨  |
+----------+----------+

 select tanks as 战舰,plane as 飞机 from WAR; //别名。给字段,表名起名字
+----------+----------+
| 战舰     | 飞机     |
+----------+----------+
| 小齐柏林 | 俾斯麦   |
| 欧根     | 提尔比茨 |
| 齐柏林   | 彗星2    |
| 齐柏林   | 彗星2    |
| 彪马     | 彗星1    |
| 彪马     | 彗星1    |
| 彪马     | 彗星1    |
| 彪马     | 彗星1    |
| 欧根     | 提尔比茨 |
+----------+----------+

select concat('姓名:',tanks) as 新名字 from WAR;
+---------------+
| 新名字        |
+---------------+
| 姓名:小齐柏林 |
| 姓名:欧根     |
| 姓名:齐柏林   |
| 姓名:齐柏林   |
| 姓名:彪马     |
| 姓名:彪马     |
| 姓名:彪马     |
| 姓名:彪马     |
| 姓名:欧根     |
+---------------+
9 rows in set (0.04 sec)

2.数据表去重复

mysql> select distinct tanks from WAR; //去掉重复数据
+----------+
| tanks    |
+----------+
| 小齐柏林 |
| 欧根     |
| 齐柏林   |
| 彪马     |
+----------+
4 rows in set (0.04 sec)


mysql> select version(); //查询版本号
+-----------+
| version() |
+-----------+
| 8.0.29    |
+-----------+
1 row in set (0.04 sec)


mysql> select 100*3-2; //计算
+---------+
| 100*3-2 |
+---------+
|     298 |
+---------+
1 row in set (0.03 sec)

mysql> select @@auto_increment_increment; //用来查询自增的步长
+----------------------------+
| @@auto_increment_increment |
+----------------------------+
|                          1 |
+----------------------------+
1 row in set (0.04 sec)


mysql> select tanks,id +1 as 战力 from WAR //战力+1
    -> ;
+----------+------+
| tanks    | 战力 |
+----------+------+
| 小齐柏林 |    2 |
| 欧根     |    3 |
| 齐柏林   |    4 |
| 齐柏林   |    5 |
| 彪马     |    6 |
| 彪马     |    7 |
| 彪马     |    8 |
| 彪马     |    9 |
| 欧根     |   10 |
+----------+------+
9 rows in set (0.04 sec)

mysql> select tanks,plane from WAR where id !=6;  //id不等于6的数据
+----------+----------+
| tanks    | plane    |
+----------+----------+
| 小齐柏林 | 俾斯麦   |
| 欧根     | 提尔比茨 |
| 齐柏林   | 彗星2    |
| 齐柏林   | 彗星2    |
| 彪马     | 彗星1    |
| 彪马     | 彗星1    |
| 彪马     | 彗星1    |
| 欧根     | 提尔比茨 |
+----------+----------+
8 rows in set (0.04 sec)

3.where条件子句

运算符语法描述
and  a and b  逻辑与
ora or b逻辑或
not not a逻辑非

4.模糊查询

运算符语法描述
IS NULLa if null如果描述符为null,结果为真
IS NOT NULLa is not null如果操作符不为null,结果为真
BETWEENa between b and c若a在b和c之间,则结果为真
likea like bSQL匹配,如果a匹配b,则结果为真                               
  INa in(a1,a2,a3...)假设a在a1,或者a2...其中的某一个值中,结果为真

mysql>  select tanks,plane from WAR where tanks like '齐%'; 
//模糊查询字段里存在的有齐的字段,后面没有限制 %表示0-任意一个字段
+--------+-------+
| tanks  | plane |
+--------+-------+
| 齐柏林 | 彗星2 |
| 齐柏林 | 彗星2 |
| 齐格飞 | NULL  |
+--------+-------+
3 rows in set (0.04 sec)


mysql>  select tanks,plane from WAR where tanks like '齐_';//_代表名字后只有一个字
Empty set (0.06 sec)


mysql>  select tanks,plane from WAR where tanks like '%齐%';
+----------+--------+
| tanks    | plane  |
+----------+--------+
| 小齐柏林 | 俾斯麦 |
| 齐柏林   | 彗星2  |
| 齐柏林   | 彗星2  |
| 齐格飞   | NULL   |
+----------+--------+
4 rows in set (0.04 sec)

mysql>  select tanks,plane from WAR where id in (5,7,9); //in关键字
+-------+----------+
| tanks | plane    |
+-------+----------+
| 彪马  | 彗星1    |
| 彪马  | 彗星1    |
| 欧根  | 提尔比茨 |
+-------+----------+
3 rows in set (0.04 sec

mysql>  select tanks,plane,id from WAR where plane is null; //查询空值
+--------+-------+------+
| tanks  | plane | id   |
+--------+-------+------+
| 齐格飞 | NULL  |   10 |
+--------+-------+------+
1 row in set (0.05 sec)

5.连表查询

mysql> select s.id,tanks,genreal from WAR as s inner join test as w where s.id = w.id;
//以两个表共有的属性“id”为基础去查询  语法 inner join 

+------+----------+---------------+
| id   | tanks    | genreal       |
+------+----------+---------------+
|    1 | 小齐柏林 | 艾尔温-隆美尔 |
|    2 | 欧根     | 巴顿          |
|    3 | 齐柏林   | 冯-博克       |
|    4 | 齐柏林   | 曼施坦因      |
+------+----------+---------------+
4 rows in set (0.04 sec)


mysql> select w.id,tanks,xinghao from WAR as s right join test as w on s.id = w.id;
//右查询
+----+----------+---------+
| id | tanks    | xinghao |
+----+----------+---------+
|  1 | 小齐柏林 | 三号    |
|  2 | 欧根     | 二号    |
|  3 | 齐柏林   | 四号    |
|  4 | 齐柏林   | 五号    |
|  5 | 彪马     | 一号    |
|  6 | 彪马     | 六号    |
+----+----------+---------+
6 rows in set (0.04 sec)
操作        描述                                 
INNER JOIN     如果表中至少有一个匹配,就返回值
left join 

会从左表返回所有的值,即使右表中没有匹配        

right join会从右表返回所有的值,即使左表没有匹配

 6.自连接(了解)

一张表拆成两张一样的表

fathergeneralson
4艾尔温-隆美尔三号
5巴顿三号
4冯-博克四号
4曼施坦因一号
5艾森豪威尔一号
4古德里安二号

父类:

generalfather
曼施坦因4
艾森豪威尔5

子类:

songeneralfather
4艾尔温-隆美尔三号
5巴顿七号
4冯-博克四号
4古德里安二号7

7.分页和排序

   1.排序     

mysql> select grades from students order by grades desc; //j降序
+--------+
| grades |
+--------+
|     95 |
|     91 |
|     89 |
|     85 |
+--------+
4 rows in set (0.05 sec)

mysql> select grades from students order by grades asc; //升序
+--------+
| grades |
+--------+
|     85 |
|     89 |
|     91 |
|     95 |
+--------+
4 rows in set (0.04 sec)


 2.分页 

mysql> select grades,name,id from students order by grades asc limit 1,5;

//查询第一到第五条的数据并以升序排列
+--------+----------+----+
| grades | name     | id |
+--------+----------+----+
|     86 | 野兽前辈 |  5 |
|     89 | 小红     |  2 |
|     89 | 石田浩二 |  6 |
|     91 | 小马    |  3 |
|     95 | 小毛  |    4 |
+--------+----------+----+
5 rows in set (0.04 sec)

mysql> select grades,name,id,class from students where class like 'java' and grades > 86 limit 0,2;

//搜索课程java并且成绩大于86的名字,分页0-2

+--------+--------+----+-------+
| grades | name   | id | class |
+--------+--------+----+-------+
|     91 | 小马 |  3 | java  |
|     95 | 小毛 |  4 | java  |
+--------+--------+----+-------+
2 rows in set (0.03 sec)



 8.常用函数

mysql> select char_length('梅须逊雪三分白'); ---查询字段长度
+-------------------------------+
| char_length('梅须逊雪三分白') |
+-------------------------------+
|                             7 |
+-------------------------------+
1 row in set (0.31 sec)

mysql> select concat('1','2','3'); ---把分开的连成一起
+---------------------+
| concat('1','2','3') |
+---------------------+
| 123                 |
+---------------------+
1 row in set (0.03 sec)


mysql> select insert('hhhahah',1,2,'笑死'); --顶替第一,二中的字符
+------------------------------+
| insert('hhhahah',1,2,'笑死') |
+------------------------------+
| 笑死hahah                    |
+------------------------------+
1 row in set (0.03 sec)

mysql> select lower('hailmyfuther');  --改成小写
+-----------------------+
| lower('hailmyfuther') |
+-----------------------+
| hailmyfuther          |
+-----------------------+
1 row in set (0.04 sec)

mysql> select upper('hailmyfuther');  ---改成大写
+-----------------------+
| upper('hailmyfuther') |
+-----------------------+
| HAILMYFUTHER          |
+-----------------------+
1 row in set (0.03 sec)

mysql> select instr('zzzwqwew','q');  --查找字段中字符在第几位
+-----------------------+
| instr('zzzwqwew','q') |
+-----------------------+
|                     5 |
+-----------------------+
1 row in set (0.04 sec)

mysql> select replace('人事如潮人如水,不胜今朝一场醉','如潮','如海'); --修改固定的字符
+---------------------------------------------------------+
| replace('人事如潮人如水,不胜今朝一场醉','如潮','如海') |
+---------------------------------------------------------+
| 人事如海人如水,不胜今朝一场醉                          |
+---------------------------------------------------------+
1 row in set (0.03 sec)


mysql> select substr('人事如潮人如水,不胜今朝一场醉',3,4); --查找第三个字符的后四个字符
+----------------------------------------------+
| substr('人事如潮人如水,不胜今朝一场醉',3,4) |
+----------------------------------------------+
| 如潮人如                                     |
+----------------------------------------------+
1 row in set (0.03 sec)

mysql> select reverse('人事如潮人如水,不胜今朝一场醉'); ---反过来字符
+-------------------------------------------+
| reverse('人事如潮人如水,不胜今朝一场醉') |
+-------------------------------------------+
| 醉场一朝今胜不,水如人潮如事人            |
+-------------------------------------------+
1 row in set (0.04 sec)


mysql> select current_date();   ---查询时间
+----------------+
| current_date() |
+----------------+
| 2022-08-03     |
+----------------+
1 row in set (0.05 sec)


mysql> select now(); ---现在的时间
+---------------------+
| now()               |
+---------------------+
| 2022-08-03 03:24:10 |
+---------------------+
1 row in set (0.03 sec)

mysql> select user();  ---查询版本号
+------------------+  
| user()           |
+------------------+
| mxx@1.83.124.115 |
+------------------+
1 row in set (0.04 sec)


1.聚合函数

mysql> select count(tanks) from WAR;  --求总数,但包括null
+--------------+
| count(tanks) |
+--------------+
|           10 |
+--------------+
1 row in set (0.03 sec)

mysql> select count(*) from WAR;  //包括空值
+----------+
| count(*) |
+----------+
|       10 |
+----------+
1 row in set (0.04 sec)

mysql> select count(1) from WAR; //两者(1)差不多推荐用(*),
+----------+
| count(*) |
+----------+
|       10 |
+----------+
1 row in set (0.04 sec)



mysql> select sum(grades) from students;  //求总和
+-------------+
| sum(grades) |
+-------------+
|         731 |
+-------------+
1 row in set (0.06 sec)

mysql> select avg(grades) from students; //求平均值
+-------------+
| avg(grades) |
+-------------+
|     91.3750 |
+-------------+
1 row in set (0.04 sec)

mysql> select max(grades) from students;//求最大值
+-------------+
| max(grades) |
+-------------+
|          99 |
+-------------+
1 row in set (0.07 sec)

mysql> select min(grades) from students;//求最小值
+-------------+
| max(grades) |
+-------------+
|          99 |
+-------------+
1 row in set (0.07 sec)

mysql> select max(grades),min(grades),avg(grades),class from students where class = 'java';
//求java成绩最大,最小,平均值
+-------------+-------------+-------------+-------+
| max(grades) | min(grades) | avg(grades) | class |
+-------------+-------------+-------------+-------+
|          95 |          86 |     90.6667 | java  |
+-------------+-------------+-------------+-------+
1 row in set (0.03 sec)

mysql> select max(grades),min(grades),avg(grades),class from students where class = 'java'group by id;
//求java成绩最大,最小,平均值,分组
+-------------+-------------+-------------+-------+
| max(grades) | min(grades) | avg(grades) | class |
+-------------+-------------+-------------+-------+
|          91 |          91 |     91.0000 | java  |
|          95 |          95 |     95.0000 | java  |
|          86 |          86 |     86.0000 | java  |
+-------------+-------------+-------------+-------+
3 rows in set (0.04 sec)


 2.MD5加密

mysql> update testmd5 set pwd = md5(pwd) where id =1; //将密码加密
Query OK, 1 row affected (0.20 sec)
Rows matched: 1  Changed: 1  Warnings: 0


mysql> insert into testmd5 values(4,'xiaoming',md5('123456789'));//插入时就加密
Query OK, 1 row affected (0.05 sec)


mysql> select * from testmd5 where name = 'xiaoming' and pwd =md5('123456789');
//检查密码是否正确,如果错误输出为空
+----+----------+----------------------------------+
| id | name     | pwd                              |
+----+----------+----------------------------------+
|  4 | xiaoming | 25f9e794323b453885f5181f1b624d0b |
+----+----------+----------------------------------+
1 row in set (0.04 sec)

七.事务

1.acid

原子性(Atomicity)要么都成功,要么都失败

一致性(Consistency)事后数据要保持一致性

持久性(Durability)事务提交则不可逆,被持久化到数据库中

隔离性 (isolation)事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务所干扰且要相互隔离


mysql> SET AUTOCOMMIT = 0; //关闭自动传输
Query OK, 0 rows affected (0.03 sec)

mysql> start transaction; //设置一个事务
Query OK, 0 rows affected (0.03 sec)

mysql> update account set money = money-500 where name = 'A'; --A减500  //传值
Query OK, 1 row affected (0.03 sec)
Rows matched: 1  Changed: 1  Warnings: 0

    -> ^C
mysql> update account set money = money+500 where name = 'B'; --B减500 //传值
Query OK, 1 row affected (0.03 sec)
Rows matched: 1  Changed: 1  Warnings: 0

    -> ^C
mysql> COMMIT; //上传数据库
Query OK, 0 rows affected (0.04 sec)

mysql> ROLLBACK; //回滚到上一次正确的数据
Query OK, 0 rows affected (0.04 sec)

mysql> set autocommit = 1; //开始自动传输
Query OK, 0 rows affected (0.04 sec)

 八.索引

1.通俗的说来使得MySQL查询数据更迅速高效

2.分类:主键索引(PRIMARY KEY)、唯一索引(UNIQUE KEY)

常规索引(KEY)

多用于大数据量

mysql> show index from account; //查看表的索引
+---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| Table   | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | Expression |
+---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| account |          0 | PRIMARY  |            1 |  id         | A         |           0 |     NULL |   NULL |      | BTREE      |         |               | YES     | NULL       |
+---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
1 row in set (0.03 sec)


mysql> alter table shop.account add fulltext index name(name); //添加索引fulltext到name
Query OK, 0 rows affected, 1 warning (0.85 sec)
Records: 0  Duplicates: 0  Warnings: 1

九.数据备份 

选择自己要导出格式然后就一直下一步就完事了

也可以到处数据库 

十、三大范式 (了解)

1.第一范式(1NF)原子性:保证每一列不可再分

2.第二范式(2NF)前提:满足第一范式 每张表只描述一件事

3.第三范式(3NF)前提:满足第一范式和第二范式,第三范式要确保数据表中每一列数据都和主键直接相关,不能间接相关

但三大范式不是完美的 1.考虑商业化的需求和目标数据库的性能更加重要 

2.在规范性能的问题,要适当考虑规范性

3.故意给表加一些冗余的字段(从多表查询变为单表查询)

4.故意加一些计算列(从大数据量降低为小数据量的查询:索引)

十一、JDBC 

把mysql.jar导入后要添加到项目中才能使用

MySQL的bug

No suitable driver found for "jdbc:mysql://43.142.160.32:3306/shop?useUnicode=true&characterEncoding

看有没有引号或者mysql的jar包版本是不是正确的,因为版本不同就导致书写不同我的是8.0.15

所以是以下写法

 十二、数据库池化

 为了节约空间而编写一种数据库,能更好的管理数据,而不因为数据连接或断开造成浪费

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值