二次写 mysql_第二次文章 mysql基础

数据库意义

1.解放双手,在重复操作文件,直接将命令发送给mysql服务端,自动操作

2.数据库,表,行

3.开户和授权

在授权时推荐加引号

密码必须用

其他,推荐用

4.客户端连接(mysql提供的客户端)

也可以用python操作mysql

1.

mysql -u root -h 192.168.1.1 -p 3306

#输入密码

SQL语句

数据库级别

show databses;

create databses 数据库名称;

utf-8

CREATE DATABASE 数据库名称 DEFAULT CHARSET utf8 COLLATE utf8_general_ci; COLLATE utf8_general_ci是一个排序

gbk

CREATE DATABASE 数据库名称 DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci; gbk 类似

表级别

数据行级别

SQL语句

数据库级别

USE 数据库名称;

drop databse 数据库名称;

表级别

show tables;

desc tb1;

***create tables XXX(nid int);#创建表

# 事务,原子操作(两步操作当成一个,失败回滚)(引擎要改为innodb)

例create table tb4(

nid int not null auto_increment primary key,

num int)engine=innodb default charset=utf8;#自增列必须是个索引

a.默认值

b.是否可以为空

c.自增列(一张表只能有一个,数字,必须是索引-主键)

d.主键索引:(一般是和自增一起用)

一张表只能有一个主键,唯一的,不能重复的,且不能为null.-一般情况下会将自增列设为主键;

1,2,3,4

唯一索引:

唯一列:

可以为null,一张表可以有多个唯一列

1,2,3,null

--约束

--索引,加速查找

create table XXX(

nid...primary key,

...

)

例子1

create table student(

name varchar(10) not null,

num int not null,

age int,

gender int,

primary key (name,num)

)

约束:

name num age

a 88 9

a 99 9

# 主键:

不能为null

不能重复,

一张表只有一个主键(可以多列)

# 一般用法:

nid int auto_increment primary key,(创建表时创造一个自增列当做主键)

简便方法:create table 表名(

nid int not null auto_increment primary key,

name varchar(16)

age int default 19

)engine=innodb default charset=utf8;

例子2:

创建一张表,表中职位一栏用数字代替,然后建立另一张表,数字和职位关联;

create table userinfo(

nid int not null auto_increment primary key,#自增列

name varchar(10),

age int,

part_nid int)engine= innodb default charset=utf8;

create table part(

nid int not null auto_increment primary key,#自增列

caption varchar(20)engine=innodb default charset=utf8;#?

1.insert into part(caption) values('IT');

2.insert into part(caption) values('AA');#创建部门

insert into userinfo(name,age,part_nid)values('h',19,1);#创建人

insert into userinfo(name,age,part_nid)values('h',19,3);#其中数字为部门

问题:创建部门需要给个限制,防止人物表出现未关联的部门.

外键:

alter table userinfo add constraint fk_u_p foreign key userinfo(part_nid) references part(nid);#外键约束 fk_u_p是外键名称

--约束

--foreign key,一对多(一个部门多个员工)

drop table XXX;#直接删除表

delate from XXX;#清空表内容(自增不会回到原点)

truncate table XXX;#清空表内容(会使自增列回原点)

select * from XXX;#查看表的内容

update XXX set part_nid=2;#更新表中nid的内容全为2

alter table userinfo add constraint fk_u_p foreign key userinfo(part_nid) references part(nid);#外键约束 fk_u_p是外键名称

数据行级别

select * from XXX;#查看表的内容

www.cnblogs.com/wupeiqi/articles/5713315.html

数据类型:

数值.时间和字符串

数值:

bit 二进制

tnyint

smallint

int

bigint

- 范围不一样

decimal(十进制的小数)--精确的

create table tb3(num decimal(6,2))#8888.18 六位数,两位小数点

字符串:

#定长

char

create table tb13(n char(7))会创建7个位置的数据,仅仅只有7位,超过会截取,过少也会占空间

insert zzzz

#变长

varchar

create table tb13(n varchar(7))7是占用空间最大数,可节省空间,但是比char效率低(例:有多个列的时候,定长可以直接跳过k个位置,而变长还需计算)

二进制数据:

TinyBlob.Blob.MediumBlob.LongBlob#例上传文件时,一般不会吧文件保存在数据库里,而是路径保存

时间:仅一下几种(格式+例子)

DATE

YYYY-MM-DD(1000-01-01/9999-12-31)

TIME

HH:MM:SS('-838:59:59'/'838:59:59')

YEAR

YYYY(1901/2155)

DATETIME

YYYY-MM-DD HH:MM:SS(1000-01-01 00:00:00/9999-12-31 23:59:59 Y)

TIMESTAMP

YYYYMMDD HHMMSS(1970-01-01 00:00:00/2037 年某时)

枚举和集合

enum

枚举类型,

An ENUM column can have a maximum of 65,535 distinct elements. (The practical limit is less than 3000.)

示例:

CREATE TABLE shirts (

name VARCHAR(40),

size ENUM('x-small', 'small', 'medium', 'large', 'x-large')

);

INSERT INTO shirts (name, size) VALUES ('dress shirt','large'), ('t-shirt','medium'),('polo shirt','small');

例子:#创建了一个枚举 (会放到内存里)

enum week:

x='星期一'

y='星期二'

z='星期三'

例子2:

CREATE TABLE shirts(

name VARCHAR(40),

size ENUM('x-small','small','medium','large')

);

INSERT INTO shirts(name,size)VALUES('dress shirt','large');

只能单选

set

集合类型

A SET column can have a maximum of 64 distinct members.

示例:

CREATE TABLE myset (col SET('a', 'b', 'c', 'd'));

INSERT INTO myset (col) VALUES ('a,d'), ('d,a'), ('a,d,a'), ('a,d,d'), ('d,a,d');

能多选

text

mediumtext

longtext

FLOAT--比如插入特别大的数,以

DOUBLE--

创建一张表 无符号

create table tb2(num int unsiged)

insert into tb2(num) values(-9)会报错,因为不允许有负数存在

数据行级别

select * from XXX;#查看表的内容

insert into tb1(name,age) values('alex',18);#添加数据

#增

insert into tb1(name,age) values('alex',18);#添加数据

insert into tb1(name,age) values('alex',18),('eric',19);#添加多条数据

insert into tb1(name,age) selectcaption,age from tb2;#由表2添加数据(类型要相对应)

#删

#改

#查

#其他

www.cnblogs.com/wupeiqi/articles/5713315.html

1、增

insert into 表 (列名,列名...) values (值,值,值...)

insert into 表 (列名,列名...) values (值,值,值...),(值,值,值...)

insert into 表 (列名,列名...) select (列名,列名...) from 表

2、删

delete from 表

delete from 表 where id=1 and name='alex'

3、改

update 表 set name = 'alex' where id>1

4、查

select * from 表

select * from 表 where id > 1 (少用*,因为效率低,可以通过一个个打出来)

select nid,name,gender as gg from 表 where id > 1

5、其他

a、条件

select * from 表 where id > 1 and name != 'alex' and num = 12;#支持条件语句

select * from 表 where id between 5 and 16;

select * from 表 where id in (11,22,33)

select * from 表 where id not in (11,22,33)

select * from 表 where id in (select nid from 表)

b、通配符#模糊搜索

select * from 表 where name like 'ale%' - ale开头的所有(多个字符串)

select * from 表 where name like 'ale_' - ale开头的所有(一个字符)

select * from 表 where name like '%le%' - 只要有'le'的所有(多个字符串)

select * from 表 where name like '_le%' - le前面任意的所有(多个字符串)

c、限制

select * from 表 limit 5; - 前5行

select * from 表 limit 4,5; - 从第4行开始的5行

select * from 表 limit 5 offset 4 - 从第4行开始的5行

d、排序

select * from 表 order by 列1 asc - 根据 “列1” 从小到大排列

select * from 表 order by 列2 desc - 根据 “列2” 从大到小排列

select * from 表 order by 列3 desc,列2 asc - 根据 “列3” 从大到小排列,如果列3有重复内容则按列2从小到大排序

e、分组

select num from 表 group by num

select num,nid from 表 group by num,nid

select num,nid from 表 where nid > 10 group by num,nid order nid desc

select num,nid,count(*),sum(score),max(score),min(score) from 表 group by num,nid#聚合函数,其中max(score)为nid分类下的最大值

select num as a,nid as b from 表 group by num,nid 把num取名为a ,nid取名为b

select num from 表 group by num having max(id) > 10#对聚合条件进行筛选时一定要用having

特别的:group by 必须在where之后,order by之前

f、连表#两张表,第一张表被称为主表,后面的表成为迎合第一张表的副表

无对应关系则不显示

select A.num, A.name, B.name

from A,B

Where A.nid = B.nid#第一种连表形式 where

无对应关系则不显示

select A.num, A.name, B.name

from A inner join B

on A.nid = B.nid#第二种连表形式 join on

A表所有显示,如果B中无对应关系,则值为null

select A.num, A.name, B.name

from A left join B

on A.nid = B.nid#left jion(优先用,因为效率高)

B表所有显示,如果B中无对应关系,则值为null

select A.num, A.name, B.name

from A right join B

on A.nid = B.nid#inne join 相当于对left jion进行过滤,不会出现null

g、组合

组合,自动处理重合

select nickname

from A

union#会自动去重

union all#不去重

select name

from B

组合,不处理重合

select nickname

from A

union all

select name

from B

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值