数据库mysql学习笔记

1.关系型数据库

1.1 关系型数据库产品

  • Oracle:在大型项目中使用,银行电信等项目

  • MysQL:web时代使用最广泛的关系型数据库

  • Microsoft SQL Server:在微软平台的项目常用

  • SQLite:轻量级数据库,主要应用在移动平台

1.2 关系型数据库核心元素

  • 数据库(表的集合,一个数据库中能够有多个表)
  • 表(由行和列组成的二维表格)
  • 行(记录)
  • 列(字段)

1.3 MySQL特点

  • 使用C和C++编写,并使用了多种编译器进行测试,保证源代码的可移植性
  • 支持多种操作系统,如 Linux、Windows、UNIX等
  • 为多种编程语言提供了 API如C、C++、Python、Java、Perl、PHP 等
  • 优化的SQL查询算法,有效地提高查询速度
  • 可以处理拥有上千万条记录的大型数据库
  • 使用标准的SQL数据语言形式

2.navicat基本使用

  • 连接mysql
  • 创建数据库,自己起名字,选择UTF-8
  • 打开数据库,查询-》新建查询

3.SQL语言基础

3.1 SQL语言中的注释

  • ctrl+/ 注释 ctrl+shift+/ 取消注释
  • – 行注释 /* */ 段注释

3.2 MySQL常用数据类型

  • 整数:int,有符号范围(-2147483648,2147483647) 无符号范围(0,4294967295)如intunsigned代表设置一个无符号的整数
  • 小整数:tinint有符号范围(-128127)无符号范围(0255)如:tinint unsigned,代表设置一个无符号的小整数
  • 小数:decimal如decimal(5,2)表示共存5位数,小数占2位,不能超过2位;整数占3位,不能超过三位:
  • 字符串:varchar,如varchar(3)表示最多存3个字符,一个中文或一个字母都占一个字符;
  • 日期时间:datetime范围(1000-01-01 00:00:00~9999-12-31 23:59:59),如2020-01-01 12:29:59

3.3 数据库中的元素

  • 数据库 ----database
  • 表 ----table
  • 字段(列) ----field
  • 记录(行) ----record

3.4 创建表

  • create table 表名(

​ 字段名 字段类型,

​ 字段名 字段类型

​ …

​ );

3.5 insert插入数据

  • insert into 表名 values(值,值,值);
  • 指定字段插入:insert into 表名(字段名,字段名) values(值,值);
  • 插入多条记录,多条语句间用分号隔开
  • 一条insert插入多条记录: nsert into 表名 values(值,值,值),(值,值,值),(值,值,值);
  • 一条insert指定字段插入多条记录:insert into 表名(字段名,字段名) values(值,值),(值,值),(值,值);

3.6 select简单查询

  • select * from 表名;
    • 查询表的所有字段
  • select 字段名,字段名 from 表名;
    • 指定字段名查询

3.7 update修改数据

  • update 表名 set 字段=值,字段=值 where 条件;
    • 如果没有where条件代表修改表中所有的记录
--id为3的记录
--姓名(name字段)改为狄仁杰,年龄(age 字段)改为 20
 update c set name ='狄仁杰',age=20 where id=3;
 
 --id大于等于7的记录长一岁
 UPDATE c SET age=age+1 where id>=7;
 

3.8 delete删除记录

  • delete from 表名 where 条件;
--删除表c中name 为 诸幕亮的记录 DELETE from c where name ='诸葛亮';

--删除年龄大于50的记录
 DELETE from c where age > 50;

--删除id小于3的记录
 delete from c where id <3:

--删除所有记录
 DELETE from c;

3.9 truncate 删除表中记录

  • truncate table 表名

    • 删除表中所有记录
  • delete和truncate区别

    • 在速度上,truncate>dellete
    • 如果想删除部分数据用delete注意带上where子句
    • 如果想保留表而将所有数据删除,自增长字段恢复从1开始, 用truncate;

3.10 drop table 删除表

  • drop table 表名;

  • drop table if exists 表名;

    • 如果表存在就删除,如果不存在就啥也不干

4.字段的约束

4.1 常用约束介绍

  • 主键(primarykey) : 值不能重复auto_increment代表值自动增长
  • 非空(notnull) : 此字段不允许填写空值:
  • 惟一(unique) : 此字段的值不允许重复;
  • 默认值(default) : 当不填写此值时会使用默认值,如果填写时以填写为准。

4.2 创建带约束字段的语法格式

create table 表名(

​ 字段名 数据类型 约束,

​ 字段名 数据类型 约束

​ …);

4.3 主键与自增长

  • 主键的值不能重复
  • 自增长 auto_increment
    • 值系统会自动维护,自动增长
--创建表d,字段要求如下:
 --id: 数据类型为int unsigned(无符号整数))
 --name 姓名(学为主键)auto_increment(自增长):
 --age 年龄:数据类型为 int(整数)
 CREATE TABLE d(
    id INT UNSIGNED PRIMARY KEY auto_increment,
    name varchar(10),
    age INT
    );
INSERT into d(NAME,age) VALUES('关羽',30);
SELECT * FROM d;
  • 0或者null作为自增长字段的占位符
--如果不指定字段,主键自增长字段的值可以用占位符,0或者null
INSERT into d VALUES (0,'雍正',30);
INSERT into d VALUES(null,'乾隆',50);

4.4 not null非空约束

  • 这个字段必须有值,如果没有值,insert插入会失败
--创建表e,字段要求如下
 --id:数据类型为 int unsigned (无符号整数);
 --name姓名:数据类型为 varchar(字符串)长度为10 not nu11(非空)
 --age 年龄:数据类型为 int(整数);

 CREATE table e
 id int UNSIGNED,
 name varchar (10) not nu11, 
 age int);

 insert into e values(1,'张三',20);
 insert into e (id, age) values (1,20);   --这句会报错 

4.5 unique唯一约束

  • 字段的约束为唯一,表示字段的值不能重复

4.6 default 默认值约束

当一个字段有默认值约束,插入数据时,如果指定了值,那么默认值无效,如果没指定值,会使用默认值

--创建表g,字段要求如下:
 --id:数据类型为 int(整数):
 --name 姓名:数据类型为varchar(字符串)长度为10
 --age 年龄:数据类型为int(整数),defau1t(默认值)30; 
 CREATE TABLE g(
 id int,
 name varchar(10),
 age int DEFAULT 30);
 
 insert into g values(1,张三’,20);
 --插入的时候不指定age的值,李四的年龄就为30
 insert into g (id,name) values (2,'李四');

5.别名与重复记录

5.1 字段的别名

  • 通过 字段名 as 别名 的语法,可以给字段名起别名,可以是中文
  • as可以省略
-- 通过as 给字段起一个别名
 select card as 身份证,name as 姓名,sex as 性别  from students;
-- 别名的as可以省略
 select card 身份证,name 姓名,sex 性别 from students;
 

5.2 表的别名

  • 在from后面的表名,可以使用as为表起别名

  • as可以省略

    SELECT * from students as stu;
    

5.3 distinc过滤重复记录

  • 语法:select distinct 字段名,字段名 from 表名
    • 来过滤select查询结果中的重复记录
SELECT DISTINCT sex FROM students;

6.条件查询

6.1 where子句

  • 使用where子句对表中的数据筛选,符合条件的数据会出现在结果集中
  • 语法:select * from 表名 where 条件
    • select后的*或者字段名,决定了返回什么样的字段(列);
    • select中where子句,决定了返回什么样的记录(行)
-- 查询students表中学号为001的记录
SELECT * from students WHERE studentNo='001';

-- 查询students表中年龄age=30的姓名name和班级class
SELECT NAME,class FROM students WHERE age='30';

6.2 比较运算符

  • 等于:=
  • 大于:>
  • 大于等于:>=
  • 小于:<
  • 小于等于:<=
  • 不等于:!= 或<>
-- 查询家乡不在北京的
SELECT * FROM students WHERE hometown!='北京';

6.3 逻辑运算符

  • and(与)
    • and有两个条件
    • 条件1 and 条件2
    • 两个条件必须同时满足
  • or(或)
    • or有两个条件
    • 条件1 or 条件2
    • 两个条件只要有一个满足
  • not(非)
    • not只有一个条件
    • 语法:not 条件
-- 查询老家是河南或是河北的学生记录
SELECT * FROM students WHERE hometown ='河南' or hometown='河北';

-- 查询班级为1班,且老家为北京的学生记录
SELECT * FROM students WHERE class='1班' and hometown='北京';

6.4 like模糊查询

  • %表示任意多个任意字符
  • _表示一个任意字符
-- 查询name姓名中以‘孙’开头的学生记录
SELECT * FROM students WHERE NAME LIKE '孙%';

-- 查询name姓名中以‘孙’开头,名字只有一个字的学生记录
SELECT * FROM students WHERE NAME LIKE '孙_';

-- 查询name姓名为任意姓,名叫‘乔’的学生记录
SELECT * FROM students WHERE NAME LIKE '%乔';

-- 查询name姓名中含‘白’的学生记录
SELECT * FROM students WHERE NAME LIKE '%白%';

-- 查询name姓名为两个字的学生记录
SELECT * FROM students WHERE NAME LIKE '__';

-- 查询name姓‘白’,且年龄大于30的学生记录
SELECT * FROM students WHERE NAME LIKE '白%' and age>30;

6.5 范围查询

  • in(值,值,值)
    • 非连续范围查找
  • between 开始值 and 结束值
    • 连续范围查找,包含开始值,包含结束值
-- 查询家乡是北京或上海或广东的学生记录
SELECT * FROM students WHERE hometown in ('北京','上海','广东');

-- 查询年龄为25-30的学生记录
SELECT * FROM students WHERE age BETWEEN 25 and 30

6.6 空判断

  • 注意 null与‘’是不同的
    • null代表什么也没有
    • ‘’代表长度为0的字符串
  • 判断空:is null
  • 判断非空:is not null
  • null不能用比较运算符去判断
-- 查找card为空的学生记录
SELECT * FROM students WHERE card IS NULL;
-- 查找card不为空的学生记录
SELECT * FROM students WHERE card IS NOT NULL;

6.7 where子句在update与delete语句中同样有效

-- 修改age为25且name为孙尚香的学生class为2班
UPDATE students SET class='2班' WHERE NAME='孙尚香' and age=25;

-- 删除class为1班,并且age大于30的学生记录
DELETE FROM students WHERE class='1班' and age>30;

-- 修改姓孙的同学班级为1班
UPDATE students set class='1班' where name LIKE '孙%'; 

-- 删除年龄在20-30之间的男同学
DELETE FROM students WHERE (age BETWEEN 20 AND 30) AND sex='男';

7. order by排序

  • 语法:select * from 表名 order by 字段1 asc|desc,字段2 asc|desc,…
    • 将行数据按照字段1进行排序,如果某些字段1相同时,则按照字段2排序,以此类推
      • 默认按照字段值从小到大排序
      • asc(默认值):从小到大排序,即升序
      • desc:从大到小排序,即降序
  • 当一条select语句出现了where和order by,where在前
-- 按年龄从大到小排序
SELECT * FROM students ORDER BY age DESC;

-- 查询所有学生记录,按年龄从大到小排序;若年龄相同,按学号从小到大排序
SELECT * FROM students ORDER BY age DESC,studentNo;

-- 查询所有男学生记录,按class班级从小到大排序,若班级相同,再按学号从大到小排序
SELECT * FROM students WHERE sex='男' ORDER BY class,studentNo DESC;

8.聚合函数

  • 为了快速得到统计数据,有5种聚合函数
  • 聚合函数不能在where后面的条件中使用

8.1 count总记录数

  • count(*)表示总记录数
    • 括号中写*与字段名,结果是相同的
-- 查询学生总数
SELECT COUNT(*) FROM students;
SELECT COUNT(NAME) FROM students;

-- 查询女学生人数
SELECT count(*) FROM students WHERE sex='女';

8.2 max最大值

  • max(字段)表示求此字段的最大值
-- 查询女生最大年龄
SELECT max(age) FROM students WHERE sex='女';

8.3 min最小值

  • min(字段)表示求此字段的最小值
 -- 查询一班女生的最小年龄
 SELECT min(age) FROM students WHERE class='1班';

8.4 sum求和

  • sum(字段)表示求此字段的和
-- 查询hometown为北京的学生年龄总和
SELECT sum(age) FROM students WHERE hometown='北京';

8.5 avg 平均值

  • avg(字段)表示求此字段的平均值
  • avg的字段中如果有null值,null不作为分母求平均
-- 查询性别为男的平均年龄
SELECT avg(age) from students WHERE sex='男';

9.数据分组

9.1 分组

  • 按照字段分组,表示此字段相同的数据会被放到一个组中
  • 分组的目的是配合聚合函数,聚合函数会对每一组的数据分别进行统计
  • 语法:select 字段1,字段2,聚合函数… from 表名 group by 字段1,字段2…
-- 分别查询男女生的数量
SELECT sex,count(*) FROM students GROUP BY sex;

-- 查询1班男女生的数量
SELECT sex,count(*) FROM students where class='1班' GROUP BY sex;

-- 用数据分组的方法统计各个班级学生总数、平均年龄、最大年龄、最小年龄
SELECT class,count(*),avg(age),max(age),min(age) FROM students GROUP BY class; 

-- 用数据分组的方法统计各个班级学生总数、平均年龄、最大年龄、最小年龄,但不统计3班,结果按班级名称从大到小排序
SELECT class ,count(*),avg(age),max(age),min(age) FROM students WHERE class!='3班'  GROUP BY class ORDER BY class DESC; 

9.2 where和group by和order by的顺序

  • select * from 表名 where 条件 group by 字段 order by 字段

9.3 分组后的数据筛选

  • 语法:select 字段1,字段2,聚合函数… from 表名

​ group by 字段1,字段2…

​ having 字段1,…,聚合…

-- 用where查询男生总数
-- where先筛选符合条件的记录,然后聚合统计
SELECT count(*) FROM students WHERE sex='男';

-- 用having查询男生总数
-- having 先分组聚合统计,在统计的结果中筛选
SELECT count(*) FROM students GROUP BY sex HAVING sex='男';

9.4 having配合聚合函数的使用

-- 求班级人数大于3的班级名字
select class FROM students GROUP BY class HAVING count(*)>3;

-- 查询班级总人数大于2人的班级名称以及班级对应的总人数
SELECT class,count(*) FROM students group BY class HAVING count(*)>2;

-- 查询平均年龄大于30的班级名称和班级总人数
SELECT class,count(*) FROM students group BY class HAVING avg(age)>30;

9.5 对比 where 与 having

  • where是对from后面指定的表进行数据筛选,属于对原始数据的筛选
  • having 是对group by 的结果进行筛选
  • aving后面的条件中可以用聚合函数,where后面的条件不可以使用聚合函数。

10.数据分页

10.1 获取部分行

  • 语法:select * from 表名 limit start,count
    • 从start开始,获取count条数据
    • start索引从0开始,如省略start默认从0开始
    • limit总是出现在select语句的最后
-- 查询前三行记录
SELECT * FROM students LIMIT 3;

-- 查询从第四行开始的三条记录
SELECT * FROM students LIMIT 33;

-- 查询年龄最大的同学的name
SELECT NAME FROM students order BY age DESC LIMIT 1;

-- 查询年纪最小的女同学的信息
SELECT * FROM students WHERE sex='女' ORDER BY age LIMIT 1;

10.2 分页

  • 当一张表记录特别多的时候,就需要用到分页
  • 已知:每页显示m条记录,求:查询第n页的数据
    • select * from students limit (n-1)*m,m

10.3 求总页数

  • 查询students表,每页显示5条记录,求总页数
    1. 查询记录总条数
    2. 使用a除以每页显示条数5,得到b
    3. 如果b为整数,则b为总页数
    4. 如果b不为整数,则b+1为总页数

11.连接查询

11.1 基本概念

  • 内连接
    • 把两张表相同的地方查询出来
  • 左连接
    • 包括了内连接,同时还查询左表特有的内容
  • 右连接
    • 包括了内连接,同时还查询右表特有的内容

11.2 内连接

  • 语法:select * from 表名1 inner join 表名2 on 表1.字段=表二.字段
  • 内连接最重要的是,找对两张表要关联的字段
  • 隐式内连接:SELECT * FROM 表1,表2 WHERE 表1.字段=表二.字段
-- students和scores表格内连接
SELECT * FROM students INNER JOIN scores ON students.studentNo=scores.studentNo;

-- 表的别名在连接中的使用
SELECT * FROM students st INNER JOIN scores sc ON st.studentNo=sc.studentNo;
  • 带有where的内连接
  • 语法:select * from 表名1 inner join 表名2 on 表1.字段=表二.字段 where 条件
  • 多表内连接,见下例
-- 查询王昭君的姓名、课程号和分数
SELECT name,courseNo,score FROM students st INNER JOIN scores sc ON st.studentNo=sc.studentNo WHERE st.name='王昭君';

-- 查询学生信息和成绩及其对应的课程名称
SELECT * FROM students st INNER JOIN scores sc ON st.studentNo=sc.studentNo  
INNER JOIN courses co ON sc.courseNo=co.courseNo;
  • 带order by的内连接
-- 查询成绩最高的男生信息,显示姓名、课程名、成绩
SELECT NAME,score,coursename FROM students st inner JOIN scores sc ON st.studentNo=sc.studentNo
INNER JOIN courses co ON sc.courseNo=co.courseNo WHERE sex='男' ORDER BY score DESC LIMIT 1;

11.3 写sql三步法

  • 搭框架
    • 基本的selec语句框架搭建起来如果有多表把相应的多表也联合进来
  • 看条件
    • 决定where后面的具体条件
  • 显示的字段
    • select后面到底要显示什么字段
-- 查询所有学生的linux课程成绩,要求只显示姓名、成绩、课程名
SELECT NAME,score,coursename FROM students st inner JOIN scores sc ON st.studentNo=sc.studentNo
INNER JOIN courses co ON sc.courseNo=co.courseNo WHERE coursename='linux';

11.4 左连接

  • 语法:select * from 表名1 left join 表名2 on 表1.字段=表二.字段
-- 查询所有学生信息及成绩,包括没有成绩的学生
SELECT * FROM students st LEFT JOIN scores sc ON st.studentNo=sc.studentNo; 

11.5 右连接

  • 语法:select * from 表名1 right join 表名2 on 表1.字段=表二.字段

11.6 多表查询,同名字段处理方式

如果一条select要用到多个表,表中有同名字段,就需要用表名.字段名 加以区分

12.自关联

  • 同一张表做连接查询
  • 自关联下,找到同一张表可关联的不同字段
-- 查询广东省所有城市
SELECT * from areas a1 INNER JOIN areas a2 on a1.id=a2.pid WHERE a1.name='广东省';

13.子查询

  • 在一个select查询语句中嵌入了另外一个select语句,被嵌入的select语句称为子查询语句

  • 外层的select语句称为主查询语句

  • 子查询与主查询的关系

    • 子查询是嵌入到主查询中
    • 子查询是辅助主查询的,要么充当条件,要么充当数据源
    • 子查询是可以独立存在的语句,是一条完整的select语句:
-- 标量子查询,子查询返回一行多列
-- 查询大于平均年龄的学生记录
SELECT * FROM students WHERE age>(select avg(age) from students);

-- 列子查询,子查询返回一列多行
-- 查询30岁学生的成绩
SELECT score FROM scores where studentNo in (SELECT studentNo FROM students WHERE age=30);

-- 表级子查询
-- 用子查询,查询所有女生信息和成绩
SELECT * FROM (SELECT * FROM students WHERE sex='女') stu
INNER JOIN scores sc on stu.studentNo=sc.studentNo;

14.MySQL内置函数

14.1 字符串函数

  • 拼接字符串: concat(str1,str2…)
    • 参数可以是字符串,也可以是数字
  • 包含字符个数: length(str)
    • 如果字符串包含utf-8格式的汉字,一个汉字length返回3
  • mysql内置函数可以在where条件后使用
  • 截取字符串: left(str,len)截取左侧
    • 返回字符串str左端的len个字符
    • 中文与英文字母个数len一致
    • right(str,len)截取右侧
    • substring(str,pos,len)返回字符串str的位置pos起len个字符,pos从1开始计数
-- 查询students表的所有学生信息,按生日从小到大排序
SELECT * FROM students ORDER BY substring(card,7,8) desc;
  • 去除空格
    • ltrim(str)返回删除左侧空格的字符串str
    • rtrim(str)返回删除右侧空格的字符串str
    • trim(str)返回删除左右两侧空格的字符串str
-- 去除字符串‘abc      ’右侧空格并和‘测试字符’拼接
select concat(rtrim(‘abc     ’),‘测试字符’);

14.2 数学函数

  • round(n,d) 求四舍五入值
    • n表示原数,d表示小数位置,默认为0
-- 查询students表中学生的平均年龄,并四舍五入
SELECT ROUND(avg(age)) FROM students;
  • rand() 随机数
    • 值为0-1.0的浮点数
-- 从学生表中随机抽一个学生
SELECT * FROM students ORDER BY RAND() LIMIT 1;

14.3 日期时间函数

  • current_date() 当前日期
  • current_time() 当前时间
  • now() 当前日期加时间

15.存储过程

  • 语法:create procedure 存储过程名称(参数列表)

    ​ begin

    ​ sql语句

    ​ end

-- 创建存储过程stu(),查询students表所有学生信息
-- 设置分割字符,navicat中不需要
delimiter//
create procedure stu()
begin
  select * from students;
end
-- 调用存储过程
call stu();
//delimiter

-- 删除存储过程,删除的时候不用写名字后边的()
drop procedure stu;

16.视图

  • 视图就是对select语句的封装,可以理解为一张只读的表,只能用select语句

  • 创建视图: create view 视图名称 as select 语句;

  • 删除视图: drop view 视图名称;

    ​ drop view if exists 视图名称;

17.事务

  • 事务就是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位
  • 事务时数据库维护数据一致性的单位,在每个事务结束时,都能保持数据一致性

17.1 开启事务

  • begin;
  • 开启事务后执行修改update或删除delete记录语句,变更会写到缓存中,而不会立刻生效

17.2 回滚事务

  • rollback;
  • 放弃修改

17.3 提交事务

  • commit;
  • 将修改的数据写入实际的表中
-- 删除students表中studentNo为001的记录,同时删除scores表中studentNo为001的记录
-- 回滚事务,两个表的删除同时放弃
begindelete from students where studentNo='001';
delete from scores where studentNo-'001';
rollback;
  • 如果开始于一个事务,执行了begin之后,没有rollback也没有commit,中间系统出问题了,默认rollback操作

18.索引

  • index
  • 给表建立索引,目的是加快select查询的速度
  • 如果一个表记录很少,几十几百条就不用索引

18.1 创建索引

  • create index 索引名称 on 表名(字段名称(长度));
  • 如果指定字段时字符串,需要指定长度,建议长度与定义字段时的长度一致
  • 字段类型如果不是字符串,可以不填长度部分
-- 为表students的age字段创建索引,名为age_index
create index age_index on students (age);
-- 为表students的name字段创建索引,名为name_index
create index name_index on students(name(10));

18.2 调用索引

  • 不需要写调用索引的语句,只要where条件后面用到的字段建立了索引,那么系统会自动调用

18.3 查看索引

  • show index from 表名
  • 对于主键,系统会自动建立索引

18.4 删除索引

  • drop index 索引名称 on 表名;

18.5 索引优缺点

  • 优点
    • 索引大大提高了SELECT 语句的查询速度
  • 缺点
    • 虽然索引提高了查询速度同时却会降低更新表的速度例如对表进行 INSERTUPDATE和DELETE操作。因为更新表时,不仅要保存数据,还要保存索引文件
    • 在实际应用中执行SELECT语句的次数远远大于执行INSERT、UPDATE和 DELETE语句的次数甚至可以占到80%~90%,所以为表建立索引是必要的。
    • 在大量数据插入时,可以先删除索引再批量插入数据,最后再添加索引,这样就可以提高数据插入的效率

19.cmd下连接到mysql

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W3JpekH5-1621240522374)(C:\Users\FAN\AppData\Roaming\Typora\typora-user-images\image-20210513195305820.png)]

  • mysql登录后常用命令

    • show databases
      • 显示系统所有数据库
    • use 数据库
      • 使用指定的一个数据库
    • show tables
      • 查看指定数据库有多少表
    • 如果命令行默认字符集与数据库默认字符集不同
      • 在windows默认字符集是gbk
      • set names gbk 告诉mysql客户端用的字符集是gbk
  • 在命令行中每条sql语句用;结尾

  • 可以通过 desc 表名 查看每一个表的字段结构

    • desc students
    • 查看students每个字段的定义

19.1 命令行创建数据库

  • create database 数据库名 default charset [默认字符集];
-- 建立一个数据库,名为mytest,默认字符集为utf-8
create database mytest default charset utf-8;

19.2 删除数据库

  • drop database 数据库名;

19.3 增加新用户

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VfSY25Fz-1621240522377)(C:\Users\FAN\AppData\Roaming\Typora\typora-user-images\image-20210513202028212.png)]

19.4 删除用户

查询速度同时却会降低更新表的速度例如对表进行 INSERTUPDATE和DELETE操作。因为更新表时,不仅要保存数据,还要保存索引文件

  • 在实际应用中执行SELECT语句的次数远远大于执行INSERT、UPDATE和 DELETE语句的次数甚至可以占到80%~90%,所以为表建立索引是必要的。
  • 在大量数据插入时,可以先删除索引再批量插入数据,最后再添加索引,这样就可以提高数据插入的效率

19.cmd下连接到mysql

[外链图片转存中…(img-W3JpekH5-1621240522374)]

  • mysql登录后常用命令

    • show databases
      • 显示系统所有数据库
    • use 数据库
      • 使用指定的一个数据库
    • show tables
      • 查看指定数据库有多少表
    • 如果命令行默认字符集与数据库默认字符集不同
      • 在windows默认字符集是gbk
      • set names gbk 告诉mysql客户端用的字符集是gbk
  • 在命令行中每条sql语句用;结尾

  • 可以通过 desc 表名 查看每一个表的字段结构

    • desc students
    • 查看students每个字段的定义

19.1 命令行创建数据库

  • create database 数据库名 default charset [默认字符集];
-- 建立一个数据库,名为mytest,默认字符集为utf-8
create database mytest default charset utf-8;

19.2 删除数据库

  • drop database 数据库名;

19.3 增加新用户

[外链图片转存中…(img-VfSY25Fz-1621240522377)]

19.4 删除用户

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y2uJMlBi-1621240522378)(C:\Users\FAN\AppData\Roaming\Typora\typora-user-images\image-20210513202512886.png)]

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值