提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
第一次使用csdn记录
提示:以下是本篇文章正文内容,下面案例可供参考
#一、安装MySQL
学习安装使用,已安装好了
#二、使用步骤
#1.使用
代码如下(示例)
win+R 进入命令提示符,输入cmd:进入小黑框
输入cd /d MySQL下的bin路径,进入该目录下
cd /d D:\MySQL\mysql-8.0.28-winx64\bin
启动MySQL服务 (结束即为另一条)
net start mysql
net stop mysql
输入命令后 ,输密码进入MySQL
mysql -u root -p
如上,进入MySQL数据库服务,即可对数据库进行操作。
#2.MySQL基础操作
只需要一些基础操作,特意记录一下
#2.1DDL(数据定义语言) 对数据库操作
查询所有数据库
show databases;
查询当前所用的数据库
select database();
创建一个数据库
create database test_sql;
删除数据库
drop database test_sql;
使用想用的数据库(后面的是数据库名字)
use mysql;
查询当前数据库所有表
show tables;
创建表
create table testtable(
id int comment '序号',
age int comment '年龄',
name varchar(20) comment '名字'
);
显示表结构
desc testtable;
查询指定表的建表语句
show create table testtable;
往指定表里加入内容
alter table testtable add sexy varchar(1) comment '性别';
修改表中的数据类型
alter table testtable modify name varchar(15) comment '姓名';
修改表中名字
alter table testtable change name username varchar(15) comment '用户名';
删除字段
alter table testtable drop sexy;
修改表名
alter table testtable rename to newtable;
删除表
drop table newtable;
#2.2 DML(数据操作语言)
对表中数据进行操作
对指定字段插入数据
insert into testtable (id,sexy) values (1,'男');
对全部字段插入数据
insert into testtable values (1,18,'小明','男');
批量添加数据
指定字段
insert into testtable (id,name) values (2,'叶银松'),(3,'程思齐'),(4,'孔德鹏');
全部字段
insert into testtable values (1,25,'叶银松','男'),(2,25,'倪超','男'),(3,25,'孔德鹏','男'),(4,26,'王昊东','男'),(5,25,'程思齐','男');
修改数据
update testtable set name='叶银松' where age=18;
删除数据
delete from testtable where age=18;
#2.3DQL(数据查询语言)
查询表中数据
部分:
select id,age from testtable;
查询所有数据:
select * from testtable;
设置别名:
select id as uid from testtable;
select name uname from testtable;
去除重复记录:
select distinct id from testtable;
条件查询
select * from testtable where id>2;
模糊查询:
select * from testtable where name like '%鹏';
聚合查询
select max(id) from testtable where sexy='男';
分组查询
select sexy from testtable where id>1 group by sexy;
select sexy from testtable where id>1 group by sexy having sexy=’男’;
感觉分组查询最复杂,其中where和have有区别
where 和 having 的区别:
- 执行时机不同:where是分组之前进行过滤,不满足where条件不参与分组;having是分组后对结果进行过滤。
- 判断条件不同:where不能对聚合函数进行判断,而having可以。
-- 年龄小于45,并根据工作地址分组,获取员工数量大于等于3的工作地址
-
select workaddress, count(*) address_count from employee where age < 45 group by workaddress having address_count >= 3;
排序查询
asc:升序(默认)
select name from testtable order by age asc;
desc:降序
select name from testtable order by id desc;
分页查询
数据不够,只能看一页,关键词是limit
后面第一个参数是起始索引,第二个是查询记录数;
从0开始,起始索引 = (查询页码 - 1) * 每页显示记录数
select * from testtable limit 0,10;
重要!!!!!!
FROM -> WHERE -> GROUP BY -> SELECT -> ORDER BY -> LIMIT
#2.4 DCL(和用户打交道)
创建用户
在当前主机上:localhost
任意主机:%
create user 'sq'@'localhost' identified by '123456';
修改密码
alter user 'sq'@'localhost' identified with mysql_native_password by '111111';
删除用户:
drop user 'sq'@'localhost';
查询用户权限
show grants for 'sq'@'localhost';
后续补充:在后面的学习过程里,遇到问题:需要用到外键约束,使不同表中相同数据互相约束,
并且在创建表时用到了primary key、mul key、auto_increment等属性
create table ordertable (
order_id int not null auto_increment,
user_id int not null ,
primary key (order_id),
key (user_id)
);
primary key 有两个作用,一是约束作用(constraint),用来规范一个存储主键和唯一性,但同时也在此key上建立了一个主键索引;
PRIMARY KEY 约束:唯一标识数据库表中的每条记录;
主键必须包含唯一的值;
主键列不能包含 NULL 值;
每个表都应该有一个主键,并且每个表只能有一个主键。(PRIMARY KEY 拥有自动定义的 UNIQUE 约束)
unique key 也有两个作用,一是约束作用(constraint),规范数据的唯一性,但同时也在这个key上建立了一个唯一索引;
UNIQUE 约束:唯一标识数据库表中的每条记录。
UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。
(每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束)
表中属性:
key
- PRI主键约束;
- UNI唯一约束;
- MUL可以重复。
auto_increment(自增)
-
为插入数据指定字段在上一次该字段值的基础上自增 1
-
只作用于主键,一般用于 ID 的属性
-
每个表只能有一个 auto_increment 字段
default(设置默认值)
设置默认值,默认值只能是常量
not null(不为空)
限制了空值的插入,用在必填字段上
https://www.jb51.net/article/55853.htm
什么是外键约束
外键是表中的一列或一组列链接到另外一张表的一列或一组列。外键会在相关联的表中起到约束作用,保证数据的一致性和实现一些级联操作。
如果在表A中建立外键,关联到表B,那么表B为主表,表A为从表。主表B中的对应的列的更新或删除会联动到外键所在的表A中的相应的列的操作(具体的操作根据在表A中添加外键时的配置不同而不同)
即,建立外键的表为从表,被外键关联的表是主表。
创建外键约束时,会针对本表中相应的行自动创建索引。
个人理解:相同数据在不同表里建立约束关系、同步
alter table ordertable add foreign key (user_id) references usertable(user_id) on update cascade on delete cascade;
[CONSTRAINT [symbol]] FOREIGN KEY
[index_name] (col_name, ...)
REFERENCES tbl_name (col_name,...)
[ON DELETE reference_option]
[ON UPDATE reference_option]
首先在CONSTRAINT
关键字后面指定外键约束的名字。如果省略名字,那么MySQL会为此外键约束自动创建一个名字。
接下来,通过FOREIGN KEY
关键字来指定此外键的列,多个列的话用逗号分隔开来,同样的外键的名字也是可省略的。
第三步指定主表和主表上被引用到的列,多列用逗号分隔。
最后,指定外键在子表和主表之间联动的动作(action),这些动作分为ON DELETE
和ON UPDATE
。reference_option
表示子表中此外键关联的列所采取的行动,当主表中被引用的列被删除(ON DELETE
)或更新(ON UPDATE
)时。
MySQL有5种reference options:CASCADE
, SET NULL
, NO ACTION
, RESTRICT
, and SET DEFAULT
:
CASCADE
:级联操作,如果父表中的一行被删除或更新,子表会自动跟着删除或更新。SET NULL
:如果父表中的行被删除或更新,子表中相应的列的值被设置为NULL
。RESTRICT
:如果父表中被外键引用的列的值在子表中存在相应的行与之匹配,MySQL拒绝父表的这个删除或更新操作。NO ACTION
:同RESTRICT
SET DEFAULT
:MySQL的语法分析器可以识别,但是InnoDB和NDB引擎不支持。
实际上,MySQL支持三种actions:RESTRICT
, CASCADE
and SET NULL
。
如果没有设置ON DELETE
和ON UPDATE
,那么默认的action是RESTRICT
。
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单记录了mysql的使用,和常见的数据库的基础操作,让自己有个印象,作为教程是不够的。