入门mysql

#查询有多少数据库   指令  show  DATABASES
show databases;
#创建数据库         指令  Create DATABASE 名字
create database measurement;
#创建好数据库想要显示数据库信息 show  create database measurement
show  create database measurement;#显示的是默认的编码格式没有指定具体格式如Utf-8
#展示数据库编码格式
SHOW VARIABLES LIKE 'character%';
#设置数据库编码格式为utf-8
alter database measurement DEFAULT character set utf8;
#删除数据库      指令drop database  数据库名字
drop database measuremennt;
#数据类型   
#整数类型   Tinyint  1个字节   SmallInt  2个字节   MEDIUMINT  3个字节   Int 4个字节   BIGINT  8个字节
#浮点型数据  FLOAT  4个字节   Double  8个字节   Decimal(M,D)  M表示数据长度  D表示小数点后面数据长度
#日期与时间类型  Year  Date  Time  DATETIME  TIMESTAMP
#字符串和二进制   
#Char  固定长度的字符串    'a' 'abc'   都是储存4个字节                   binary固定长度的二进制数据
#Varchaar  可变长度字符串  'a' 储存需要一个字节   'abc'需要储存3个字节   varbinary可变长度的二进制数据
#BLOB  表示二进制大数据   TEXT  大文本数据   ENUM  枚举数据类型  SET  字符串对象      BIG位字段类型

#创建数据库
/*
CREATE TABLE 表名(
字段名1,数据类型[完整性约束条件],
字段名1,数据类型[完整性约束条件],
字段名1,数据类型[完整性约束条件],
...
)
*/
Create database itcast;
use itcast;
create table tb_grade(
id int(11),
name varchar(20),
grade float
)
show tables;
#查看数据表  show create table  表的名字
show create table tb_grade;
show create table tb_grade\G;
#使用DESCRIBE查看数据表  DESCRIBE  表名  简称DESC  表名
Describe tb_grade;
#修改数据表名字  alter table  旧表名字  rename to  新表名字 
alter table  tb_grade rename to grade;
show tables;
#修改字段名  alter table  表名  change  字段名字  新的字段名字   数据类型
alter table grade change name username VARCHAR(20);
show create table grade;
DESC grade;
#修改字段的数据类型  alter table 表名  modify 字段名字  数据类型
alter table grade modify id int(20);
desc grade;
#添加字段  alter table 表名  add  字段  数据类型
alter table grade add age int(10);
desc grade;
#删除字段
alter table grade drop age;
desc grade;
#修改字段的排列位置  alter table  表名  modify  字段名字  数据类型  first/after  (某个字段名字)
alter table grade modify username varchar(20) first;
desc grade;
alter table grade modify id int(20) after grade;
desc grade;
#删除数据库  Drop  table  表名
Drop table grade;
Desc grade;

 

#多表查询   创建数据库chapter05
Create DataBase chapter05;
Use chapter05;
Create table grade(
    id int(4) not null primary key,
    name varchar(36)
)
create table student(
    sid int(4) not null primary key,
    sname varchar(36),
    gid int(4) not NULL
);
#为表添加外键约束
/*
alter table 表名  add constraint FK_ID  forign key(外键字段名字) references  表名1  (主键字段名字)
*/
select * from grade;
select * from student;
alter table student add CONSTRAINT FK_ID foreign key(gid) references  grade(id);
desc grade;
desc student;
show create table student;
/*
在表添加外键约束时,有些地方需要注意
1.建立外键的时候需要注意表必须是InnDB型,不能是临时表。因为在MYSQL中只有InnDB类型的表才能支持外键。
2.定义外键名时,不能加引号,如constraint 'fk_id'
*/
#删除外键约束   alter table 表名  drop foreign key 外键名
alter table student drop foreign key FK_ID;  
#操作关联表  多对一  多对多  一对一  
#添加数据
alter table student add constraint FK_ID foreign key(gid) references grade(id);
show  create table student;
show create table grade;
alter table grade  character set utf8;
alter table student  character set utf8;
alter table student convert to character set utf8 ;
alter table grade convert to character set utf8 ;
insert into grade(id,name)values(1,'软件1班');
insert into grade(id,name)values(2,'软件2班');
select * from grade;
insert into student values(1,'王红',1),(2,'李强',1),(3,'赵四',2),(4,'贺娟',2);
select * from grade where name='软件1班';
select sname from student where gid=1;
#连接查询
create table department(
    did int not null primary key,
    dname varchar(20)
) CHARACTER SET utf8 COLLATE utf8_general_ci;
create table employee(
    id int not null PRIMARY key,
    name varchar(36),
    age int(2),
    did int not NULL
    )CHARACTER SET utf8 COLLATE utf8_general_ci;
insert into department(did,dname) values(1,'网络部'),(2,'媒体部'),(3,'研发部'),(5,'人事部');
insert into employee(id,name,age,did) values(1,'王红',20,1),(2,'李强',22,1),(3,'赵四',20,2),(4,'郝娟',20,4);
#交叉连接
select * from department cross join employee;
#内连接  它和where效果一样 需要注意的是,这两个语句的查询结果虽然一样,但是join on是
#内连接语句,wherre是判断语句,在where语句可以直接添加其他软件,而
select * from department join employee on department.did=employee.did;
select * from department,employee where  department.did=employee.did;  
#外连接分为左连接和右连接和全外连接
/*
select  所有字段  from  表1 LEFT|RIGHT [OUTER] JOIN 表2
ON  表1.关系字段=表2.关系字段  where  条件
*/
#左连接
select * from employee;
select * from department;
select department.did,department.dname,employee.name from department Left Join employee on department.did=employee.did;
select department.did,department.dname,employee.name from department Right Join employee on department.did=employee.did;
select employee.name,employee.age,department.dname from department Join employee on department.did=employee.did;

#带In关键字的子查询
select * from department where did in (select did from employee where age=20);
#事务和储存过程
#所谓的事务就是针对数据库的一组操作,它可以由一条或则n条SQL语句组成,同一个事务的操作具备同步的操作,
#如果一条语句不通过,那么所有语句不通过
#开启事务
start transaction;
#开启事务之后就可以执行SQL语句,SQL语句执行成功之后,需要想用相应语句提交事务
#提交事务的语句具体如下
commit;
#如果不想提交当前事务还可以使用相关语句取消事务rollback
create database chapter06;
use  chapter06;
create table account(
    id int primary key auto_increment,
    name varchar(20),
    money FLOAT
)CHARACTER SET utf8 COLLATE utf8_general_ci;#collate:指定数据字符集排序的规则,utf8默认的排序规则为utf8_general_ci

show create table account; insert into account(name,money) values('a',1000),('b',1000); select * from account; #通过update 语句将a账户的100元准给b最后提交事务 start transaction; update account set money=money-100 where name='a'; update account set money=money+100 where name='b'; commit; select * from account; #原子性 一致性 隔离性 持久性 update account set money=money+100 where name='a'; update account set money=money-100 where name='b'; commit; select * from account; start transaction; update account set money=money-100 where name='a'; update account set money=money+100 where name='b'; select * from account; ROLLBACK; select * from account; #事务的隔离级别 数据库是多线程并发访问的,所以很容易出现多个线程同时开启事务的情况, #这样就会出现脏读、重复读和幻读情况

 

posted on 2024-02-22 22:35  无名之辈的ggb  阅读(1)  评论(0编辑  收藏  举报