MySQL基礎操作與數據類型

来源:https://www.cnblogs.com/fengqiang626/archive/2019/08/28/11423841.html
-Advertisement-
Play Games

[TOC] 1.文件夾(庫) 增: 改: 查: 刪: 2.文件(表) 增: 改: 查: 刪: 3.文件的一行內容 增: 改: 查: 刪: 4.創建表的完整語法 5.整型類型 | 類型 | 大小 | 範圍(有符號) | 範圍(無符號)unsigned約束 | 用途 | | | | | | | | TI ...


目錄

1.文件夾(庫)

查看字元集編碼的指令

show variables like "%char%";

MySQL客戶端連接服務端時的完整指令

mysql -h 127.0.0.1 -P 3306 -u root -p
1.增:
create database 資料庫名 charset utf8(指定該庫的編碼方式);
2.改:
alter database 資料庫名 charset gbk;(更改編碼方式)
3.查:
show databases; # 查所有庫的庫名
show create database 資料庫名; # 單獨查看某一個庫的信息
4.刪:
drop database 資料庫名

2.文件(表)

use 資料庫名; # 首先切換文件夾
select database(); # 查看當前所在的文件夾
1.增:
create table 表名(id int,name char);
2.改:
    2.1 修改存儲引擎
        mysql> alter table service 
            -> engine=innodb;

    2.2 添加欄位
        mysql> alter table student10
            -> add name varchar(20) not null,
            -> add age int(3) not null default 22;

        mysql> alter table student10
            -> add stu_num varchar(10) not null after name;                //添加name欄位之後

        mysql> alter table student10                        
            -> add sex enum('male','female') default 'male' first;          //添加到最前面

    2.3 刪除欄位
        mysql> alter table student10
            -> drop sex;

        mysql> alter table service
            -> drop mac;

    2.4 修改欄位類型modify
        mysql> alter table student10
            -> modify age int(3);
        mysql> alter table student10
            -> modify id int(11) not null primary key auto_increment;    //修改為主鍵

    2.5 增加約束(針對已有的主鍵增加auto_increment)
        mysql> alter table student10 modify id int(11) not null primary key auto_increment;
        ERROR 1068 (42000): Multiple primary key defined

        mysql> alter table student10 modify id int(11) not null auto_increment;
        Query OK, 0 rows affected (0.01 sec)
        Records: 0  Duplicates: 0  Warnings: 0

    2.6 對已經存在的表增加複合主鍵
        mysql> alter table service2
            -> add primary key(host_ip,port);        

    2.7 增加主鍵
        mysql> alter table student1
            -> modify name varchar(10) not null primary key;

    2.8 增加主鍵和自動增長
        mysql> alter table student1
            -> modify id int not null primary key auto_increment;

    2.9 刪除主鍵
        a. 刪除自增約束
        mysql> alter table student10 modify id int(11) not null; 

        b. 刪除主鍵
        mysql> alter table student10                                 
            -> drop primary key;
3.查:
show tables; # 查看當前庫下所有的表名
show create table 表名; # 查看表的詳細信息
desc 表名; # 查看表結構
4.刪:drop table 表名;

3.文件的一行內容

1.增:
insert into 資料庫名.表名 values(1,'la'),(2,'lala'),(3,'lalala');
2.改:
update 庫名.表名 set name='sb' where id > 1;
3.查:
select id,name from 庫名.表名;  # 查 id和name
select * from 庫名.表名;    # 查所有
4.刪:
delete from 庫名.表名 where name='qwe';
truncate 庫名.表名; #當數據量比較大的情況下,使用這種方式,刪除速度快 也可刪除自增帶來的問題

創建不同引擎的表

create table t1(id int)engine = innodb;
create table t2(id int)engine = myisam;
create table t3(id int)engine = blackhole;
create table t4(id int)engine = memory;

4.創建表的完整語法

一 創建表的完整語法
create table 表名(
欄位名1 類型[(寬度) 約束條件],
欄位名2 類型[(寬度) 約束條件],
欄位名3 類型[(寬度) 約束條件]
);

#解釋:
類型:使用限制欄位必須以什麼樣的數據類型傳值
約束條件:約束條件是在類型之外添加一種額外的限制

# 註意:
1. 在同一張表中,欄位名是不能相同
2. 寬度和約束條件可選,欄位名和類型是必須的
3、最後一個欄位後不加逗號

create database db37;

5.整型類型

類型 大小 範圍(有符號) 範圍(無符號)unsigned約束 用途
TINYINT 1 位元組 (-128,127) (0,255) 小整數值
SMALLINT 2 位元組 (-32 768,32 767) (0,65 535) 大整數值
MEDIUMINT 3 位元組 (-8 388 608,8 388 607) (0,16 777 215) 大整數值
INT或INTEGER 4 位元組 (-2 147 483 648,2 147 483 647) (0,4 294 967 295) 大整數值
BIGINT 8 位元組 (-9 233 372 036 854 775 808,9 223 372 036 854 775 807) (0,18 446 744 073 709 551 615) 極大整數值
FLOAT 4 位元組 float(255,30) (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) 0,(1.175 494 351 E-38,3.402 823 466 E+38) 單精度 浮點數值
DOUBLE 8 位元組 double(255,30) (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 雙精度 浮點數值
DECIMAL 對DECIMAL(M,D) ,如果M>D,為M+2否則為D+2 double(65,30) 依賴於M和D的值 依賴於M和D的值 小數值
1、作用:id號,各種號碼,年齡,等級
2、分類:
tinyint(**)
int (*****)
bigint(***)

3、測試:預設整型都是有符號的
create table t1(x tinyint);
insert into t1 values(128),(-129);

create table t2(x tinyint unsigned);
insert into t2 values(-1),(256);

create table t3(x int unsigned);
#4294967295
insert into t3 values(4294967296);

create table t4(x int(12) unsigned);
insert into t4 values(4294967296123);


4、強調:對於整型來說,數據類型後的寬度並不是存儲限制,而是顯示限制
    所以在創建表示,如果欄位採用的是整型類型,完全無需指定顯示寬度,
    預設的顯示寬度,足夠顯示完整當初存放的數據

# 顯示時,不夠8位用0填充,如果超出8位則正常顯示
create table t5(x int(8) unsigned zerofill);
insert into t5 values(4294967296123);
insert into t5 values(1);

6.補充sql_mode

# 查看sql_mode
mysql> show variables like "%sql_mode%";
+----------------------------+---------------------+
| Variable_name              | Value               |
+----------------------------+---------------------+
| binlogging_impossible_mode | IGNORE_ERROR        |
| block_encryption_mode      | aes-128-ecb         |
| gtid_mode                  | OFF                 |
| innodb_autoinc_lock_mode   | 1                   |
| innodb_strict_mode         | OFF                 |
| pseudo_slave_mode          | OFF                 |
| slave_exec_mode            | STRICT              |
| sql_mode                   | STRICT_TRANS_TABLES |
+----------------------------+---------------------+
8 rows in set (0.00 sec)
#修改sql_mode為嚴格模式:在該模式下,如果插入的數據超過限制,則會立即報錯
# 模式設置和修改(以解決非嚴格模式下,插入大於限制的數不報錯):

    方式一:先執行select @@sql_mode,複製查尋出來的值並將其中的NO_ZERO_IN_DATE,NO_ZERO_DATE刪除,然後執行set sql_mode='修改後的值'或者set session sql_mode='修改後的值';,例如:set session sql_mode='STRICT_TRANS_TABLES';改為嚴格模式 # session可以不用寫

    # 此方法只在當前會話中生效,關閉當前會話就不生效了。

    方式二:先執行select @@global.sql_mode,複製查詢出來的值並將其中的NO_ZERO_IN_DATE,NO_ZERO_DATE刪除,然後執行set global sql_mode = '修改後的值'。

    此方法在當前服務中生效,重新MySQL服務後失效
    方法三:在mysql的安裝目錄下,或my.cnf文件(windows系統是my.ini文件),新增 sql_mode = STRICT_TRANS_TABLES

添加my.cnf如下:
[mysqld]            sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER

7.浮點型

作用:存儲身高、體重、薪資
分類:
float (*****)
double (**)
decimal (**)

測試:
#相同點
#1、對於三者來說,都能存放30位小數,
#不同點:
1、精度的排序從低到高:float,double,decimal
2、float與double類型能存放的整數位比decimal更多


create table t9(x float(255,30));
create table t10(x double(255,30));
create table t11(x decimal(65,30));

insert into t9 values(1.111111111111111111111111111111);
insert into t10 values(1.111111111111111111111111111111);
insert into t11 values(1.111111111111111111111111111111);

mysql> select * from t9;
+----------------------------------+
| x                                |
+----------------------------------+
| 1.111111164093017600000000000000 |
+----------------------------------+
1 row in set (0.00 sec)

mysql> select * from t10;
+----------------------------------+
| x                                |
+----------------------------------+
| 1.111111111111111200000000000000 |
+----------------------------------+
1 row in set (0.00 sec)

mysql> select * from t11;
+----------------------------------+
| x                                |
+----------------------------------+
| 1.111111111111111111111111111111 |
+----------------------------------+
1 row in set (0.00 sec)

8.字元類型

類型 大小 用途
CHAR 0-255位元組 定長字元串
VARCHAR 0-65535 位元組 變長字元串
TINYBLOB 0-255位元組 不超過 255 個字元的二進位字元串
TINYTEXT 0-255位元組 短文本字元串
BLOB 0-65 535位元組 二進位形式的長文本數據
TEXT 0-65 535位元組 長文本數據
MEDIUMBLOB 0-16 777 215位元組 二進位形式的中等長度文本數據
MEDIUMTEXT 0-16 777 215位元組 中等長度文本數據
LONGBLOB 0-4 294 967 295位元組 二進位形式的極大文本數據
LONGTEXT 0-4 294 967 295位元組 極大文本數據
1、作用:姓名,地址,描述類的信息

2、分類:
char 定長
varchar 變長

3、測試:字元的寬度限制單位是字元個數
create table t12(x char(4)); # 超出4個字元則報錯,不夠4個字元則用空格補全成4個字元
create table t13(y varchar(4));# 超出4個字元則報錯,不夠4個字元那麼字元有幾個就存幾個

insert into t12 values('hello');
insert into t13 values('hello');

insert into t12 values('a'); #'a    '
insert into t13 values('a'); #'a'

set global sql_mode="strict_trans_tables,PAD_CHAR_TO_FULL_LENGTH";
select char_length(x) from t12; #4
select char_length(y) from t13; #1

# 註意:
針對char類型,mysql在存儲時會將數據用空格補全存放到硬碟中
但會在讀出結果時自動去掉末尾的空格,因為末尾的空格在以下場景中是無用
mysql> select * from t14 where name="lxx"; # name欄位明確地等於一個值,該值後填充空格是沒有用


mysql> select * from t14 where name like "lxx"; # name欄位模糊匹配一個值,該值後填充空格是有用的

# 對比char與varchar

name char(5)
# 缺點:浪費空間
# 優點:存取速度都快
egon alex lxx  wxx  yx

name varchar(5)
# 缺點:存取速度都慢
# 優點:節省空間
(1bytes+egon)(1bytes+alex)(1bytes+lxx)

9.日期類型

大小 (位元組) 範圍 格式 用途
DATE 3 1000-01-01/9999-12-31 YYYY-MM-DD 年月日
TIME 3 '-838:59:59'/'838:59:59' HH:MM:SS 時分秒
YEAR 1 1901/2155 YYYY 年份值
DATETIME 8 1000-01-01 00:00:00/9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 年月日時分秒
TIMESTAMP 4 1970-01-01 00:00:00/2038 結束時間是第 2147483647 秒,北京時間 2038-1-19 11:14:07,格林尼治時間 2038年1月19日 凌晨 03:14:07 YYYYMMDD HHMMSS 混合日期和時間值,時間戳
1、作用:時間相關
2、分類:
date:1999-01-27
time: 11:11:11
datetime:1999-01-27 11:11:11
year:1999
3、測試
create table student(
    id int,
    name char(16),
    born_year year,
    birth date,
    class_time time,
    reg_time datetime
);
insert into student values(1,'egon','2000','2000-01-27','08:30:00','2013-11-11 11:11:11');

10.枚舉與集合類型

類型 大小 用途
ENUM 對1-255個成員的枚舉需要1個位元組存儲; 對於255-65535個成員,需要2個位元組存儲; 最多允許65535個成員。 單選:選擇性別
SET 1-8個成員的集合,占1個位元組 9-16個成員的集合,占2個位元組 17-24個成員的集合,占3個位元組 25-32個成員的集合,占4個位元組 33-64個成員的集合,占8個位元組 多選:興趣愛好
枚舉類型(enum)
# 示例:
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');

集合類型(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');

# 作用與分類:
枚舉enum:多選一個
集合set:多選多,如選著多個相同的會自動去重

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • redis使用watch完成秒殺搶購功能: 使用redis中兩個key完成秒殺搶購功能,mywatchkey用於存儲搶購數量和mywatchlist用戶存儲搶購列表。 它的優點如下: 1. 首先選用記憶體資料庫來搶購速度極快。 2. 速度快併發自然沒不是問題。 3. 使用悲觀鎖,會迅速增加系統資源。 ...
  • grid設置環境變數後可以在任意目錄下執行,如root沒設置的話需要帶絕對路徑export ORACLE_HOME=/u01/app/11.2.0/gridexport PATH=$ORACLE_HOME/bin:$PATH--/u01/app/11.2.0/grid/bin/crsctl或srvc ...
  • # Cluster # Use a descriptive name for your cluster: # 集群名稱,用於定義哪些elasticsearch節點屬同一個集群。 cluster.name: bigdata # Node # 節點名稱,用於唯一標識節點,不可重名 node.name: ...
  • Hadoop : Hadoop是Apache基金會旗下的一個分散式系統基礎架構.主要包括 : 分散式文件系統HDFS,分散式資源管理系統Yarn.可以使得用戶在不瞭解分散式底層細節的情況下,開發分散式程式,充分利用集群的分散式能力進行運算和存儲 Hadoop核心構成 分散式文件系統HDFS Hado ...
  • [學習筆記] hdfs常用命令:i)防盜版實名手機尾號:73203。 hdfs dfs -mkdir /user 會在hadoop的根目錄下創建一個目錄。可以通過hdfs dfs -ls / 來查。 ii)在bin目錄下,繼續:hdfs dfs -put README.txt / (把本地READM ...
  • 一:欄位修飾符 (約束) 1:null和not null修飾符 1:null和not null修飾符 我們通過這個例子來看看 mysql> create table worker(id int not null,name varchar(8) not null,pass varchar(20) no ...
  • INSERT: 批量插入結果集 1. insert into table select x,y from A UNION select z,k from B ; 2. insert into table select x,y,z from A where 1=1; 3.批量導入表數據 ,不導入表約束 ...
  • [學習筆記] 5)hadoop基本文件配置:hadoop配置文件位於:/etc/hadoop下(etc即:“etcetera”(附加物))core-site.xml:<configuration> <property> <name>fs.defaultFS</name> <value>hdfs:// ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...