SQL:结构化查询语言,操作数据库的语言

SQL语句分类:6类

DDL:数据定义语言 关键字:create drop alter

DML:数据操作语言 关键字:insert update delete

DQL:数据查询语言 关键字:select

TPL:事务处理语言 commit rollback

DCL:数据控制语言 授权 grant

CCL:指针控制语言 游标 cursor

通过命令操作数据库

连接数据服务器::mysql -uroot(root:名字) -p -->输入密码

展示数据库:show databases;

创建数据库:  CREATE DATABASE 名字;

删除数据库:  drop database 名字;

选择库,具体的要在哪个库下面建表:use 数据库名称;

创建表:

create table 表名(

-> id int comment'编号', //comment'编号' :注释,写在数据类型后面

-> workno varchar(10), -> name varchar(10),

-> sex varchar(1),

-> age tinyint unsigned, // unsigned:不能为负数

-> idcard char(10),

-> entrydate date

-> );

展示数据库中的表:show tables;

查看表的结构: desc 表名;

删除表:drop table 表名;

查看数据库创建的过程: show create  database表名;

修改表

删除表中的某个字段:alter table 表名 drop 字段名;

在表中添加一个字段,在最后面添加:alter table 表名 add 字段名 text;

在某字段之后添加一个字段:alter table 表名 add 想要添加的字段名 boolean after 在哪个字段后;

修改某个字段的数据类型:alter table 表名 modify 字段名 数据类型;

同时修改字段和数据类型  :alter table 表名 change  原字段名 新字段名数据类型;

字段的数据类型

  • int  11位
  • varchar()  可变长的字符串
  • char()  不可变长的字符串
  • tinyint  4
  • boolean  1
  • text   文本  不限制字符串长度
  • float  浮点类型(float(8,2)  最大长度是8  ,小数点占2位)

增加数据【insert】

insert  into 表名(字段1, 字段2...)  values(值1, 值2); //按照字段的顺序来写

删除数据【delete】

delete from 表名 where 字段名="值";

删除多条数据:delete from 表名 where id in(?,?,?);

修改数据【update】

update 表名 set 字段名1="?",字段名2=?,字段名3=?,字段名4="?"  where id=?;

数据的查询【select】

显示数据表里面的所有数据:select * from 表名;

按照指定的字段进行查询:select 字段1,字段2 from 表名;

按照指定的字段进行查询的时候给字段起别名:select id as "编号", name as "姓名" from 表名;

#对查找的数据进行约束性查找
#关系运算符   >  <  >=  <=  != 
#例如:查找年龄大于49岁的数据
#查什么  select * 
#从哪查  from person1
#查询的条件是啥  where   age > 49
 select * from person where age > 49;

#逻辑运算符
#and  or
#条件1  and  条件2   两个条件必须同时满足才进行显示 也可以使用&&
#条件1  or  条件2   两个条件满足一个就进行显示 也可以使用 ||
#年龄大于45岁的并且 薪资大于10000的数据
 select * from person1 where age > 45 and salary > 10000;

#例如:显示年龄大于45岁的或者  性别为1的数据
 select * from person1 where age > 45 or gender = 1;

#排序  order by
#默认的排序方式  从小到大的排序
#asc  就是默认的 从小到大进行排序
#desc   从大到校进行 排序
#select 字段  from  表名 order by 字段 asc;  从小到大
#select 字段  from  表名 order by 字段 desc;  从大到小

#分页查询  limit
#select 字段from  表名  limit  数; 如果是一个数的话  数是几就查询出来几条数据;
#select 字段from  表名  limit  数值1, 数值2; 数值1代表偏移量   数值2代表查几条;
 select * from person limit 0, 2;
 select * from person limit 2, 2;
 select * from person limit 4, 2;

#假如7条数据   1  2  3  4  5  6  7
#  数值2   每页显示的条数   3
#第一页    123    select * from person limit 0,3;
#第二页    456    select * from person limit 3,3;
#第三页     7      select * from person limit 6,3;
#偏移量和数值2是有一个规律的
#页数pageCount   pageSize = 3;
#limit  (pageCount-1)*pageSize, pageSize;

#sql语句的查询还有一些内置的函数
#一般不建议使用,因为效率低
#获取年龄这个字段的最大值      max()
#只能得到某一个值
 select max(age) from 表名;

#获取年龄的最小值  min()
 select min(age) from 表名;

#获取年龄的平均值  avg()
 select avg(字段名) from 表名;

#获取这个字段的和  sum()
 select sum(字段名) from 表名;

#开发中,统计数据库里面有多少条数据
 select count(*) from 表名;

(sql嵌套写法  一个sql语句的结果会当成另一个sql语句的条件来用)

事务的操作

保证数据是安全
关闭mysql的自动提交方式,开启了事务   mysql有自动提交。

例子1:

set autocommit = 0;

delete from person1 where id = 8;

rollback; #回滚  上面删除sql语句没有真正的提交,等着rollback让其回滚。回到删除的sql语句之前状态;

例子1-2:

update 表名 set 字段="xx" where id = ?; //修改一条数据

#上面的修改的sql语句,没有真正提交,commit让其真正提交。

外键约束

外键用来让两张表的数据之间建立连接,从而保证数据的一致性和完整性。

语法格式: 添加外键

CREATE TABLE 表名(
字段名  数据类型,
...
CONSTRAINT 外键名称 FOREIGN KEY (外键字段名) REFERENCES 主表(主表列名)
);

ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY(外键字段名) REFERENCES 主表(主表列名)

删除外键:

ALTER TABLE 表名  DROP FOREIGN KEY 外键名称;

数据约束

在创建表的时候,一定要对字段进行设置,在你插入数据的时候要按照当前字段要求进行处插入数据,不然就会报错。

默认值

例子:用户在插入数据的时候,如果没有给当前字段进行赋值,可以在创建表的时候带一个默认的值    #default
mysql> create table person (
    -> id int,
    -> name varchar(32),
    -> country char(20) default "PRC"
    -> );
Query OK, 0 rows affected (0.02 sec)

非空

#在建表的时候如果给字段设置了非空(not null) ,在插入数据的时候,必须对当前字段输入数据如果不写数据的话,会报错
mysql> create  table  person2 (
    -> id int not null,
    -> name varchar(32) not null
    -> );
Query OK, 0 rows affected (0.03 sec)

唯一

#在建表的时候使用unique关键字进行修饰字段的时候,插入数据的时候数据值不能重复
mysql> create table person3 (
    -> id int,
    -> name varchar(32) unique
    -> );
Query OK, 0 rows affected (0.04 sec)

主键

#是唯一和非空的组合
#primary key
#在设计数据库的时候,一定要有一个字段是主键的。
#一般使用和业务逻辑无关的字段当成一个主键。

mysql> create table person4 (
    -> id int primary key,
    -> name varchar(32)
    -> );
Query OK, 0 rows affected (0.02 sec)

自增长

#在插入数据的时候,有些字段是可以实现自增长的
#auto_increment
#使用自增长约束字段那么字段必须是整数类型,而且一般是主键
#插入第一个数据的时候主键值是1  不是0
#在删除最后一条数据的时候,然后再插入一条数据,主键的值在原来被删除id的值的基础之上自增1
mysql> create table person5 (
    -> id int primary key auto_increment,
    -> name varchar(32)
    -> );
Query OK, 0 rows affected (0.02 sec)

联表查询

1 内连接和外连接 

#例子:

员工表和部门表有一定的联系,员工表的中deptId和部门表中的id有关系的
#我希望查询出来一个员工必须带上部门名字
#查什么  从哪查   查询的条件是啥
#查员工的id  员工的名字   部门的名字
mysql> select employee.id, employee.empName, dept.deptName
    -> from employee, dept
    -> where employee.deptId = dept.id;

内连接查询  多表联查
#inner  join   ..... on
#on 后面约束的条件
mysql> select e.id, e.empName, d.deptName
    -> from employee e#从一张表查
    -> inner join dept d#加入另外一张表
    -> on e.deptId = d.id#约束条件
    -> where e.empName = "xx";

#外连接【很少用】
#分为两个:左外连接 和右外连接
#左外连接: 表1 left outer join 表2  ....on  
#左边表的内容会全部显示,右边表去匹配左边的表,如果没有匹配到左边表就显示为null
mysql> select d.deptName, e.id, e.empName
    -> from dept d left outer join employee e
    -> on d.id = e.deptId;

#右外连接:right  outer join ....on
#右边的表要都显示,左边标去匹右边的表,如果匹配到显示为null
mysql> select d.deptName, e.id, e.empName
    -> from employee e right outer join dept d
    -> on d.id = e.deptId;

一对多的查询【多对一的查询】

#一个部门对应多个员工 一对多
#一个员工对应一个部门  一对一
#查找安保部有谁
#查什么?  从哪查?   查询的条件是啥
mysql> select d.deptName,e.empName
    -> from dept d, employee e
    -> where d.id = e.deptId and d.deptName = "安保部";

多对多的查询【学生表 中间表 课程表 】

id | stuName             id | sid | cid            id | courseName

一个学生可以选择多门课程
一门课程可以被多个学生选择

#想看的话选择了哪些课程

第一种方式:
mysql> select s.id,s.stuName,c.courseName
    -> from stu s
    -> inner join stu_course sc
    -> on s.id = sc.sid
    -> inner join course c
    -> on sc.cid = c.id
    -> where s.stuName = "?";

第二种方式:

mysql> select s.id,s.stuName,c.courseName
    -> from stu s, stu_course sc, course c
    -> where s.id = sc.sid and sc.cid = c.id and s.stuName = "?";

SQL权限管理【了解】

1.1创建用户 :

create user 用户名@服务器的地址 identified by 密码;

mysql> create user "dehua" identified by  "222222";

1.2授权一个用户操作数据库及下面的表:

grant all on 数据库的名字.表名字 to 用户名

all:代表的是权限 增删改查的权限

mysql> grant all on java2115.person1 to "dehua";
Query OK, 0 rows affected (0.00 sec)

1.3撤销授权

revoke all on 数据库的名字.表名字 from 用户名

mysql> revoke all on java2115.person1 from "dehua";

1.4用户的删除

drop user 用户名

数据库-Mysql-Ⅰ相关推荐

  1. linux笔记本没有insert,无法在Linux中将UTF8插入数据库MySQL(Can not insert UTF8 to Database MySQL in Linux)...

    无法在Linux中将UTF8插入数据库MySQL(Can not insert UTF8 to Database MySQL in Linux) 当创建表时,我已经设置了charset = utf8. ...

  2. 数据库MYSQL学习系列三

    数据库MYSQL学习系列三 三.MYSQL事务与存储引擎 3.1-数据库事务 什么是事务 一系列有序的数据库操作: o要么全部成功 o要么全部回退到操作前的状态 o中间状态对其他连接不可见 事务的 ...

  3. mysql数据库64免安装_MYSQL数据库mysql 5.7.18 winx64 免安装 配置方法

    <MysqL数据库MysqL 5.7.18 winx64 免安装 配置方法>要点: 本文介绍了MysqL数据库MysqL 5.7.18 winx64 免安装 配置方法,希望对您有用.如果有 ...

  4. mysql 分区指定路径_[数据库]MySQL 指定各分区路径

    [数据库]MySQL 指定各分区路径 0 2016-11-08 18:00:44 介绍 可以针对分区表的每个分区指定各自的存储路径,对于innodb存储引擎的表只能指定数据路径,因为数据和索引是存储在 ...

  5. mysql利用触发器删除数据库_[数据库]mysql 触发器的创建 修改 删除

    [数据库]mysql 触发器的创建 修改 删除 0 2015-12-16 23:00:04 //做一个简单的练习,创建一个简单的触发器 完成添加文章的时候,自动加上时间,默认作者 为 '日记本的回忆' ...

  6. 解决向数据库mysql插入double数据小数点不显示问题

    解决向数据库mysql插入double数据小数点不显示问题 参考文章: (1)解决向数据库mysql插入double数据小数点不显示问题 (2)https://www.cnblogs.com/sovi ...

  7. mysql存储的判断if_if在数据库mysql存储中判断

    我们经常会对一个事物作出选择,就如屏幕前的小伙伴们选择继续浏览本篇文章,或者关闭这个界面,这就是我们所说的判断.当然看文章的判断条件是,文章的内容是否符合小伙伴们的兴趣.今天我们就数据库mysql存储 ...

  8. mysql数据库可以升级吗_[数据库]MySQL升级

    [数据库]MySQL升级 0 2016-08-16 22:00:18 MySQL的升级相对来说还是比较简单的. 它支持两种方式的升级: 原地升级(In-place Upgrade) 关闭数据库,替换旧 ...

  9. 数据库MYSQL学习系列一

    数据库MYSQL学习系列一 一.MYSQL数据库基础 1.1-认识MYSQL 什么是数据库 计算机处理和存储的一切信息都是数据 计算机系统中一种用于存取数据的程序 一种: 计算机系统中有很多种能够存取 ...

  10. 大数据之数据库mysql优化实战(一)

    2019独角兽企业重金招聘Python工程师标准>>> :facepunch: 大数据之数据库mysql优化实战(一) 首先你要有数据,不然怎么测试,几百条就算了,还没跑就完了. 本 ...

最新文章

  1. 你想要的宏基因组-微生物组知识全在这(180601)
  2. html5游戏闪屏卡顿,HTML5 闪屏的熊猫
  3. 通话录音_谁说苹果手机不能通话录音?四种方法教给你!别再说你不知道了
  4. Android中的Touch事件
  5. 老司机也晕车--java字符串String晕车之旅
  6. 「SVN」ubuntu svn自动忽略了.a.so等文件
  7. Luogu P2577 [ZJOI2005]午餐
  8. 文件操作的小tips
  9. 数据传输完整性_电缆监测数据传输系统分析与设计
  10. java -jar命令引导启动Springboot项目的那点事
  11. mysql cast numeric,mysql decimal、
  12. 国内首款 FPGA 云服务器,性能是通用 CPU 服务器 30 倍以上
  13. 微型计算机的工作过程是执行程序过程吗,微型计算机的工作过程和主要性能指标...
  14. Texpad for Mac(LaTeX编辑器软件)
  15. 【从C到C++学习笔记】域运算符/new/delete运算符/重载/Name managling/extern C/带函数默认值参数
  16. Win7下Protel 99 SE SCH库文件和PCB库文件添加问题
  17. java实现复制粘贴功能代码,附源代码
  18. jk背带是什么意思_JK 制服和 LO 装 (科普向)
  19. linux触摸屏校准命令,Linux 触摸屏校准
  20. 解决Outlook搜索功能的搜索结果不完整问题

热门文章

  1. 特斯拉Y系列降价后订单暴增,国信证券称后期有望降至26万
  2. C/C++定义全局变量/常量几种方法的区别
  3. java ssm框架调用微信_Java开发SSM框架微信退款的实现
  4. 支付宝公众平台 接口
  5. 数据可视化(matplotlib库)知识点归纳总结及练习题
  6. java毕业设计客观题考试mybatis+源码+调试部署+系统+数据库+lw
  7. CSDN Serverless峰会,带你走进云的下一个十年
  8. 2019-06-17问答系统项目落地调研
  9. 完整回顾刘强东明尼苏达事件,他的这一夜让京东市值蒸发600亿
  10. 不知道用什么软件可以测试电路,自制电器维修检测工具