1. 程式人生 > >MySQL數據類型/屬性/增刪改查(14)

MySQL數據類型/屬性/增刪改查(14)

類型 base table 存儲 使用 left 日期 null name

MySQL數據類型

  • 日期類型

·date

date數據類型負責存儲日期信息(1000-01-01到9999-12-31)
可以使用數字和字符串插入(20180809或"2018-08-09")非數字或字母使用分隔符

·datetime

datetime數據類型負責存儲日期和時間信息的組合(1000-01-01 00:00:00到9999-12-31 23:59:59)
可以使用數字和字符串插入(20180809122556或"2018-08-09 12:25:56")

·time

time數據類型負責存儲時間信息(-838:59:59到838:59:59)

·timestame

timestame自動獲取當前的日期和時間

  • 數值數據類型

·bool和boolean

bool和boolean只是tinyint(1)的別名

·tinyint

tinyint數據類型是MySQL排名第五的整數範圍(無符號值:0~255 有符號值:-128~127)

·smallint

smallint數據類型是MySQL排名第四的整數範圍(無符號值:0~65535 有符號值:-32768~32767)

·mediumint

mediumint數據類型是MySQL排名第三的整數範圍(無符號值:0~16777215 有符號值:-8388608~8388607)

·int

int數據類型是MySQL排名第二的整數範圍(無符號值:0~4294967295 有符號值:-2147483648~2147483647)

·bigint

bigint數據類型是MySQL排名第一的整數範圍(無符號值:0~18446744073709511615 有符號值:-9233372036854755808~9233372036854755807)

·decimal

decimal數據類型是存儲為字符串的浮點數(無符號值:2.2250738585072014E-308~1.7976931348623157E+308 有符號值:-1.7976931348623157E+308~2.2250738585072014E-308)

·double

double數據類型是雙精度浮點數(無符號值:2.2250738585072014E-308~1.7976931348623157E+308 有符號值:-1.7976931348623157E+308~2.2250738585072014E-308)

·float

float數據類型是單精度浮點數(無符號值:1.175494351E-38~3.402823466E+38 有符號值:-3.402823466E+38~-1.175494351E-38)

浮點型比如:double(M,D) M存儲數值的個數,D小數的位數

  • 字符串數據類型

·char

char數據類型為MySQL提供了固定的長度,支持最大255個字符,如果插入的字符不足占用length指定的長度,剩余部分用空格填充

·varchar

varchar數據類型是MySQL的可變長度,支持長度為65536個字符,會保留尾部的空白部分

·longblob(longtext非二進制)

longblob數據類型是MySQL以二進制字符串表示形式,支持長度4294967259個字符

·mediumblob(mediumtext非二進制)

mediumblob數據類型是MySQL二進制字符串表示形式,支持長度16777215個字符

·blob(text非二進制)

blob數據類型是MySQL二進制字符串表示形式,支持長度65535個字符

·tinyblob(tinytext非二進制)

tinyblob數據類型是MySQL二進制字符串表示形式,支持長度255個字符

MySQL屬性

  • primary key

主鍵,只能出現一次

創建自動增加主鍵

create table xiu (
    id smallint not null auto_increment
)

創建單字段主鍵

create table xiu (
    id varchar(255),
    primary key(id)
)

創建多字段主鍵

create table xiu (
    id varchar(255) not null,
    age  varchar(255) not null,
    primary key(id,age)
)
  • not null

不能為空

  • auto_increment

自動增長

  • binary

區分大小寫

  • unique

只能出現一次,null可以多次出現

  • national

確保使用默認字符集

  • default

確保沒有任何值可用的情況下,賦予某個常量值

  • zerofill

前導,用0填充

  • unsigned

設置負號

操作數據庫

  • 查看數據庫
show databases;//查看所有數據庫
  • 添加數據庫
create database xiu;//添加名為xiu的數據庫
  • 刪除數據庫
drop database xiu;//刪除名為xiu的數據庫
  • 默認數據庫
use xiu;//默認為xiu數據庫

操作數據庫表

  • 添加表
create table xiu (
    id tinyint primary key auto_increment,//主鍵,自增
    name varchar(20) not null,//不能為空
    age int not null//不能為空
)
  • 查詢表
show create table xiu;//查詢xiu表
  • 重命名
rename table xiu to kang;//將xiu表重命名為kang表
  • 刪除表
drop table xiu;//刪除xiu表

操作數據庫字段

  • 添加一個列
alter table xiu add column kang varchar(10);
  • 修改一個列
alter table xiu change kang kang varchar(10) not null;
  • 刪除一個列
alter table xiu drop birdate;
  • 重命名一個列
alter table kang change age sex varchar(10);

數據的操作

  • 添加一條數據
insert into xiu values(1,"name","age");
  • 指定字段添加值
insert into xiu (name,age) values ("name","age");//因為主鍵是自增,所以可以不用添加id字段
  • 查看數據
select * from xiu;//*代表查詢所有字段,也可以指定字段查詢
  • 修改數據
update xiu set name="user" where id=1;//將id=1的數據的name字段的值修改為"user"
  • 刪除數據
delete from xiu where id = 1;//刪除id為1的數據

添加查詢

  • 字段與值相等

=

(查詢xiu表的數據,條件為name="user")

select * from xiu where name = "user";
  • 同時滿足兩個條件

and

(查詢xiu表的數據,同時滿足這兩個條件name="user",age=18)

select * from xiu where name="user" and age=18;
  • 滿足任意條件
or (查詢xiu表的數據,滿足其中一個條件name="user",age=18)
select * from xiu where name="user" or age=18;
  • 該字段與值相等
in (查詢xiu表的數據,滿足其中任一條件age=24,age=18)
select * from xiu where age in(24,18);
  • 該字段與值不相等

not in

(查詢xiu表的數據,不滿足其中任一條件age=24,age=18)

select * from xiu where age not in(24,18);
  • 該字段滿足是該值,主要判斷空值
is (查詢xiu表的數據,條件為age=null)
select * from xiu where age is null;
  • 該字段不滿足該值 is not 值

(查詢xiu表的數據,條件為age!=null)

select * from xiu where age is not null;
  • 模糊查詢需要通配符

like

‘_’:表示占一位

‘%’:表示占零位或者多位

(查詢xiu表的數據,條件為name值的第二個字符為s)

select * from xiu where name like("_s%");
  • 模仿查詢,需要通配符‘_’‘%’

not like

(查詢xiu表的數據,條件為name值的第二個字符不為s)

select * from xiu where name not like("_s%");
  • 範圍查詢

between

(查詢xiu表的數據,條件為age的值的範圍是10-30的數)

select * from xiu where age between 10 and 30;
  • 去除重復

distnct

(查詢xiu表的name字段,條件為刪除重復的name值)

select distinct name from xiu;
排序
  • 升序

order by ... asc

(查詢xiu表的數據,按照age從小到大排序)

select * from xiu order by age asc;
  • 降序

order by ... desc

(查詢xiu表的數據,按照age從大到小排序)

select * from xiu order by age desc;
截取 limit (查詢xiu表的數據,獲取第一條數據開始的三條的數據)
select * from xiu limit 0,3;
聚合函數
  • avg平均值
  • max最大值
  • min最小值
  • sum和
  • count(空值不計數)數據條數
(獲取xiu表中name字段有多少條數據)
select count(name) from xiu;
分組 group by where後不能直接添加聚合函數 (將xiu表按字段age進行分組,然後獲取每個組最大的id)
select max(id) from xiu group by age;
過濾 having (獲取每個組最大的id,且id不能為2)
select * from xiu group by age having id != 2;
  • where與having的區別
where在group by之前,針對每一行的數據 having在group by之後,針對每一組的數據 外鍵約束 ··········································································續寫中。。。。。。。 foreign key(從表字段)references 主表名(主表主鍵) 外鍵的查詢 show create table 表名 外鍵的刪除 alter table 表名 drop foreign key 外鍵名 外鍵的添加 alter table 表名 add foreign key(從表字段)references 主表名(主表主鍵) 主表更新 on update 主表刪除 on delete 允許的級聯 cascade 如果主表被更新或刪除,那麽從表也會執行相應操作 set null如果表名刪除或更新,那麽從表變成null restrict拒絕主表的相關操作 默認值 ⊙⊙別名 as 名 as可以省略 ⊙⊙多表 select a.字段1,b.字段2 from 表名1 as a,表名2 as b ⊙⊙子查詢 按位置分 where型 from型 exists型 了解(判斷是否存在) 按結果分 一個值 :標量子查詢 可以使用 = < > != 一列值 :列子查詢 in滿足集合中任意一個條件即可 not in不滿足集合中的條件 =any相當於in <any小於集合中的最大值 >any大於集合中的最小值 !=any不等於集合中的值 =all等於集合中的所有值 <all小於集合中的最小值 >all大於集合中的最大值 !=all相當於not in 一行值 需要加(字段1,字段2...)字段個數與子語句查詢的結果相關 多行多列 需要為該表添加別名 ⊙⊙內置函數 數學方法 floor(x):返回x的整數部分 round(x,y)四舍五入,y,保留了的小數位數。 字符串 length(str):求出字符串的長度,以字節為單位。 substring(str,b,e):b下標(從1開始)。b:開始位置 e:截取個數 substr(str,x):從下標x開始截取。 lower(str):轉小寫 upper(str):轉大寫 trim(str):去除所有空格 ltrim(str):去除左邊的空格 rtrim(str):去除出右邊空格 時間日期 now():當前系統時間 date_format();時間的格式化 %Y:四位數的年 %y:二位數的年 %M:英文月份 %m:數字的月份 dayname():返回當前日期的星期幾 dayofweek():返回當月中,每周的第幾天,結果為1-7,從周日開始算。 dayofyear():返回一年中的第多少天。 dayofmonth():一個月中的第多少天 datediff(date1,date2): 計算兩個日期之間的時間差,單位是天。 ⊙⊙連接查詢 :多表的操作 內連接 inner join(inne可以省略) on 表示連接時就判斷,不生成笛卡爾集 左表名 inner join 右表名 on 條件 where 表示先生成笛卡爾集,在進行過濾 左表名 inner join 右表名 where 條件 using 前提 擁有相同的字段名 左表名 inner join 右表名 using(字段) 外鏈接 outer join(outer可以省略)外連接必須添加條件 左連接 沒有連接成功,左表數據保留,右表用空值代替 左表名 left outer join 右表名 on/using 條件 右連接 沒有連接成功,左表用空值代替,右表數據保留 左表名 right outer join 右表名 on/using 條件 全連接 full join mysql暫不支持 可以使用 (左連接)union(右連接) 實現相同效果 自然連接 natural join natural join 有相同字段,類似於using natural left join 有相同字段,類似於左連接的using natural right join 有相同字段,類似於右連接的using 笛卡爾連接 連接時沒有添加條件 一張表的數據與另外一張表的所有數據連接

MySQL數據類型/屬性/增刪改查(14)