数据库-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 用户名

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值