MySQL数据库的一些基本操作

在这里插入图片描述
SQL语言
1.Structured Query Language 结构化查询语言
2.SQL非过成型的语言

  • 过程性的语言:以来上一条或者上几条语句执行
    • 非过程性语言:一条语言,就对应一个返回的结果

SQL分类
1.DDL 数据定义语言

  • 创建数据库 创建表 创建视图 创建索引 修改数据库 删除数据库 修改表 删除表
  • create --创建 /alter --修改 / drop–删除

2.DML 数据操作语言

  • 操作数据 / 插入数据(insert)/ 修改数据(update)/删除数据(delete)

3.DCL 数据控制语言

  • if else while

4.DQL 数据查询语言

  • 从表中查询数据(select)

中文乱码
在这里插入图片描述具体操作:1.点击计算机右键管理->服务和应用程序->MySQL->右键停用
2.在文件夹中找到my.ini->点击->找到[client]下的[mysql]下的“default-character-set=utf8”
3.将utf8改成gbk保存
4.重启MySQL(方法和停用一样)
注意:[mysqld]下的utf8不更改

//DDL

//创建数据库
create database 数据库名称;     //基本语法
create database 数据库名称 character set 编码 collate 校对规则;//标准
//查看所有数据库
show databases;
//使用数据库
use 数据库名称;
//查询数据库的创建的信息
show create database 数据库名称;
//查询当前正在使用的数据库
select database();
//删除数据库
drop database 数据库名称;
//修改
alter database 数据库名称 character set 'gbk' collate '校对规则';
//不能修改 数据库名称,只能修改 编码 或 校对规则


//创建表
create table 表名称(
      字段1 类型(长度) 约束,
      字段2 类型(长度) 约束,
      字段3 类型(长度) 约束
      );
      /*注意:1.创建表的时候,后面是小括号,最后有分号
             2.字段与字段之间用逗号,最后一个字段不用逗号
             3.如果声明字符串数据的类型,长度是必须指定的
             4.如果不指定数据的长度,有默认值的。int类型的默认长度是11
     */
/*
表类型
1.字符串  
   *char    长度不可变     (长度不够用空格补全)
   *varchar   长度可变
2.大数据类型
   *blob    字节(电影   MP3)
   *text    字符(文本内容)
3.数值型
   *tinyint / smallint / int /bigint /float / double
4.逻辑性
   *bit(0/1)
5.日期类型
   *date       :只包含年、月、日
   *time       :只包含时、分、秒
   *datetime   :包含日期和时间。如果插入数据的时候,字符值为空,字段的值就是空。
   *timestamp  :包含日期和时间。如果插入数据的时候,字符值为空,默认获取当前的系统的时候,把时间保存到字段中。  
 
 约束
 1.主键约束代表记录的唯一标识
    *关键字:primary key 通过该关键字声明某一列为主键
    *唯一      值就不能相同
    *非空      值也不能为空
    *被引用     (和外键一起来使用)
 2.唯一约束
    *声明字段是唯一的     关键字 unique
 3.非空约束
    *声明字段的值是不能空的    not null 
*/
//查看表
show tables;  
//查看表的详细信息
desc 表名称;
//查看创建表的信息
show create table 表名称;
//删除表
drop table 表名称;
//修改表
//1.添加新的字段
alter table 表名称 add 字段名称 数据类型(长度) 约束;
//2.修改字段数据类型、长度或约束
alter table 表名称 modify 字段名称 数据类型(长度) 约束;
//3.删除某一字段
alter table 表名称 drop 字段名称;
//4.修改字段名称
alter table 表明称 change 旧字段 新字段 数据类型(长度) 约束;
//5.修改表名称
rename table 旧名称 to 新名称;


//DML
//添加数据
insert into(字段1,字段2,字段3) values(值1,值2,值3;//向某几字段插入值
insert intovalues(1,值2,值3,...);    //向全部字段加值

/*
注意:1.插入的数据要与字段数据类型相同
     2.数据大小应在规定范围内
     3.数据中数据的列的位置和字段位置相同
     4.日期数据输入样例:'2020-2-1'
       字符串输入样例:'这是一个字符串'
*/
 
//修改表
update 表名称 set 字段1=1,字段2=2 where 条件;
//如果没有where的关键字,说明修改的默认所有记录;如果有where的关键字,修改符合条件的记录
//删除表
delete fromwhere 条件;
//如果没有where的关键字,说明删除的默认所有记录;如果有where的关键字,删除符合条件的记录 
//删除所有数据
delete from;    //支持事务的操作,即误删除可以恢复
truncate;      //不支持事务的操作
/*创建事务
     start transaction;
     delete form user;
     rollback;
*/    


//DQL
//查询
 select *from;    //默认查询所有表
 select 字段1,字段2,字段3... from;   //查询指定的字段的数据
 distinct     //去掉重复的数据
 //查询语句可以用as起别名
 select 字段1 as 别名,字段2,字段3 as 别名 from; 
 select * fromwhere 条件;
 //where的一些常用符号
 >  <  >=  <=  =  <>不等于
 in   --代表范围
 egg: select *from stu where math = 88;  查询一条数据,条件是数学=88
      select *from stu where math in (90,95,100);  查询结果可能是多条数据,数学成绩需要在in的范围内
 like  --模糊查询
    like关键字的值的用法
         1.select *from stu where name like '张_';   --使用_占位符,结果可以为:张飞,张三。。。but 张益达 不符合
         2.select *from stu where name like '张%';   --使用%占位符,结果可以为:张三,张飞,张益达, 只要姓张都可以
         3.select *from stu where name like '%张';   --结果:以张结尾都行,->即使随便输个乱七八糟的东西最后是张<- 这也是符合的
         4.select *from stu where name like '%张%';  --结果只要带张就行
 逻辑条件
  and   --与
  or    --或
  not   --非
  between A and B   --在A和B之间
  egg:1.select *from stu where math > 90 ang english > 80;
      2.select *from stu where math > 90 or english > 80;
      3.select *from stu where  not math > 90;
      4.
 order by 对结果进行排序
    order by 字段 asc|desc
        asc  --代表升序
        desc --代表降序
        1.select name,math from stu order by math asc;
        2.select name,math from stu order by math desc;
        3.select name,(math+english+chinese) as t from stu order by t desc;
        4.select name,english,math from stu order by english desc,math desc;       //按英语降序,英语相同后按数学降序
        5.select name,chinese from stu where name like '小%' order by chinese asc;       //对性小的同学按语文升序输出
        
//聚集函数
/* 1.都是操作某一列函数
   2.Excel表格,求数量,求和,平均值,最大值,最小值
*/

//求数量
1.select count(*) from stu;
2.select count(math) from stu where math > 80;

//求和(只对数值类型的起作用)
1.select sum(math) from stu;
2.select sum(math),sum(english),sum(chinese) from stu;

//求平均
1.select sum(math)/count(math) from stu;
2.select avg(math) from stu;

//最大值和最小值
1.select max(math) from stu;
2.select min(english) from stu;


//分组查询
1.select count(*)from 表名称 group by 字段; 
2.select product,sum(price) from orders group by product having sum(price)>100;
//先分组,将分组中总价格大于100的商品查询出
//having与where的功能相同  where关键字后不能使用聚合函数,而having可以
3.select product,sum(price) from orders where price > 100 group by product having sum(price)>100;
//查询购买了几类商品,并且商品的价格需要大于100,每类的总价大于100 



//单表约束
//唯一   关键字unique
//非空  关键字not null
egg:create table person(
     id int primary key,
     username varchar(20) unique,
     emall varchar(50) not null
     );
     
/*主键
特点:1.非空2.唯一3.被引用
声明关键字:primary key    声明某一字段为主键
注意:添加数据时,声明为主键的字段,所添加的值不能重复*/
egg:create table person(
     id int primary key,
     username varchar(20)
     );
     添加1insert into person values(1,'美美');
     添加2insert into person values(1,'小凤');    //此时报错
                                    --id字段的值不能再为1,
/*主键的自动递增
  适用于int和bigint类型
  关键字:auto_increment
*/  
egg:drop table person;
	create table person(
		id int primary key auto_increment,
		username varchar(20);
		);
		添加1insert into person values(null,'美美');
        添加2insert into person values(null,'小凤'); 
        //主键回将null自动变为1,2...                                                             
 

//多表约束(外键)
/*用来保护数据的完整性
举个栗子:
一公司有 部门表  和  员工表 
部门表               员工表
id   bname         id  name   sal     bname
1    研发部          1   熊大   1600      1      //属于哪个部门
2    人事部          2   熊二   2655      1
                    3   小美   3000      2
好了现在公司开会说,不需要研发部了,要将部门表中的研发部去掉;
按理说,研发部是不能删除,因为部门下还有两个员工
如果是单纯建立两个表,没有加外键(两表之间没关联),则可以删除,但是这不符合常理因为熊大熊二所在的部门1没有对应的部门
如果是加上外键则不能删除,删除时会报错,此时应将员工移到别的部门,再将研发部删掉
*/ 
//创建部门表   
create table dept(
    did int primary key auto_increment,
    dname varchar(30)
    );    
//创建员工表
 create table emp(
     eid int primary key auto_increment,
     ename varchar(30),
     sal double,
     dno int,
     foreign key (dno) references dept(did)       //添加外键关联
    );                             
//此时dno的取值只能从dept中的did的值中取,也可以为null

数据库表结构设计的三种方式

  1. 一对一
  2. 一对多
  3. 多对多

一对一:利用主键进行一一对应,不多介绍。
一对多:主表(一方) 从表(多方)
建表原则,在多方表中添加字段,把该字段作为外键,指向一方表的主键。
多对多:建表原则,用户表和角色表例子,需要创建3张表,有一张中间表,存储数据关系

未完待续。。。

发布了22 篇原创文章 · 获赞 33 · 访问量 1075

猜你喜欢

转载自blog.csdn.net/qq_42577542/article/details/104121411