数据库-Mysql-Ⅰ
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-Ⅰ相关推荐
- 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. ...
- 数据库MYSQL学习系列三
数据库MYSQL学习系列三 三.MYSQL事务与存储引擎 3.1-数据库事务 什么是事务 一系列有序的数据库操作: o要么全部成功 o要么全部回退到操作前的状态 o中间状态对其他连接不可见 事务的 ...
- mysql数据库64免安装_MYSQL数据库mysql 5.7.18 winx64 免安装 配置方法
<MysqL数据库MysqL 5.7.18 winx64 免安装 配置方法>要点: 本文介绍了MysqL数据库MysqL 5.7.18 winx64 免安装 配置方法,希望对您有用.如果有 ...
- mysql 分区指定路径_[数据库]MySQL 指定各分区路径
[数据库]MySQL 指定各分区路径 0 2016-11-08 18:00:44 介绍 可以针对分区表的每个分区指定各自的存储路径,对于innodb存储引擎的表只能指定数据路径,因为数据和索引是存储在 ...
- mysql利用触发器删除数据库_[数据库]mysql 触发器的创建 修改 删除
[数据库]mysql 触发器的创建 修改 删除 0 2015-12-16 23:00:04 //做一个简单的练习,创建一个简单的触发器 完成添加文章的时候,自动加上时间,默认作者 为 '日记本的回忆' ...
- 解决向数据库mysql插入double数据小数点不显示问题
解决向数据库mysql插入double数据小数点不显示问题 参考文章: (1)解决向数据库mysql插入double数据小数点不显示问题 (2)https://www.cnblogs.com/sovi ...
- mysql存储的判断if_if在数据库mysql存储中判断
我们经常会对一个事物作出选择,就如屏幕前的小伙伴们选择继续浏览本篇文章,或者关闭这个界面,这就是我们所说的判断.当然看文章的判断条件是,文章的内容是否符合小伙伴们的兴趣.今天我们就数据库mysql存储 ...
- mysql数据库可以升级吗_[数据库]MySQL升级
[数据库]MySQL升级 0 2016-08-16 22:00:18 MySQL的升级相对来说还是比较简单的. 它支持两种方式的升级: 原地升级(In-place Upgrade) 关闭数据库,替换旧 ...
- 数据库MYSQL学习系列一
数据库MYSQL学习系列一 一.MYSQL数据库基础 1.1-认识MYSQL 什么是数据库 计算机处理和存储的一切信息都是数据 计算机系统中一种用于存取数据的程序 一种: 计算机系统中有很多种能够存取 ...
- 大数据之数据库mysql优化实战(一)
2019独角兽企业重金招聘Python工程师标准>>> :facepunch: 大数据之数据库mysql优化实战(一) 首先你要有数据,不然怎么测试,几百条就算了,还没跑就完了. 本 ...
最新文章
- 你想要的宏基因组-微生物组知识全在这(180601)
- html5游戏闪屏卡顿,HTML5 闪屏的熊猫
- 通话录音_谁说苹果手机不能通话录音?四种方法教给你!别再说你不知道了
- Android中的Touch事件
- 老司机也晕车--java字符串String晕车之旅
- 「SVN」ubuntu svn自动忽略了.a.so等文件
- Luogu P2577 [ZJOI2005]午餐
- 文件操作的小tips
- 数据传输完整性_电缆监测数据传输系统分析与设计
- java -jar命令引导启动Springboot项目的那点事
- mysql cast numeric,mysql decimal、
- 国内首款 FPGA 云服务器,性能是通用 CPU 服务器 30 倍以上
- 微型计算机的工作过程是执行程序过程吗,微型计算机的工作过程和主要性能指标...
- Texpad for Mac(LaTeX编辑器软件)
- 【从C到C++学习笔记】域运算符/new/delete运算符/重载/Name managling/extern C/带函数默认值参数
- Win7下Protel 99 SE SCH库文件和PCB库文件添加问题
- java实现复制粘贴功能代码,附源代码
- jk背带是什么意思_JK 制服和 LO 装 (科普向)
- linux触摸屏校准命令,Linux 触摸屏校准
- 解决Outlook搜索功能的搜索结果不完整问题
热门文章
- 特斯拉Y系列降价后订单暴增,国信证券称后期有望降至26万
- C/C++定义全局变量/常量几种方法的区别
- java ssm框架调用微信_Java开发SSM框架微信退款的实现
- 支付宝公众平台 接口
- 数据可视化(matplotlib库)知识点归纳总结及练习题
- java毕业设计客观题考试mybatis+源码+调试部署+系统+数据库+lw
- CSDN Serverless峰会,带你走进云的下一个十年
- 2019-06-17问答系统项目落地调研
- 完整回顾刘强东明尼苏达事件,他的这一夜让京东市值蒸发600亿
- 不知道用什么软件可以测试电路,自制电器维修检测工具