mysql-1

第一天


mysql 5.7.28二進(jìn)制

centos 7.6

hostname:db-01


rpm -qa |grep mariadb

yum remove mariadb-libs -y

useradd mysql -s /sbin/nologin

id mysql

mkdir -p /app/database

mkdir -p /data

mkdir -p /binlog/3306

chown -R mysql.mysql /app /data /binlog

cd /app/database

tar xf mysql-5.7.28.*.tar.gz

ln -s mysql-5.7.8.* mysql

vim /etc/profile

? export PATH=/app/database/mysql/bin:$PATH

source /etc/profile

mysql -V


==mysqld --initialize-insecure --user=mysql --basedir=/app/database/mysql --datadir=/data/3306==

dba可以忽略warning

5.6不是這個(gè)命令是:==/app/database/mysql/scripts/mysql_install_db==

? yum install -y libaio-devel


vim /etc/my.cnf

[mysqld]
user=mysql
basedir=/app/databae/mysql
datadir=/data/3306
server_id=6
port=3306
socket=/tmp/mysql.sock
[mysql]
socket=/tmp/mysql.sock



cat > /etc/my.cnf <<EOF
[mysqld]
user=mysql
basedir=/app/databae/mysql
datadir=/data/3306
server_id=6
port=3306
socket=/tmp/mysql.sock
[mysql]
socket=/tmp/mysql.sock
EOF

cd /app/database/mysql/support-files

cp mysql.server /etc/init.d/mysqld

chkconfig --add mysqld

systemctl start mysqld


==mysql -S /tmp/mysql.sock==

只能在本地使用坟漱,不依賴ip和port

mysql -uroot -pmima -h ip -P3306


==實(shí)例:mysqld+工作線程+預(yù)分配的內(nèi)存結(jié)構(gòu)==

? 功能:管理數(shù)據(jù)


mysqld的程序結(jié)構(gòu)(兩層)

  • server層

  • 連接層

    • 提供連接協(xié)議(socket玛瘸、tcp/ip)
    • 驗(yàn)證
    • 提供專用鏈接線程
  • SQL層

    • 語(yǔ)法檢查

    • 語(yǔ)義(DDL,DCL,DML,DTL...)

    • 權(quán)限

    • 解析器:解析預(yù)處理处铛,得到多種執(zhí)行計(jì)劃

    • 優(yōu)化器:基于代價(jià)cost映穗,幫我們選擇最優(yōu)的方案(執(zhí)行計(jì)劃)

    • 執(zhí)行器:按照優(yōu)化器的選擇俊抵,執(zhí)行sql語(yǔ)句帚屉,得出執(zhí)行結(jié)果(你需要的數(shù)據(jù)在磁盤的什么位置)

      • 你需要的數(shù)據(jù)在xxx段号枕,xxx區(qū)锌订,xxx頁(yè)

    • 查詢緩存(query cache默認(rèn)不開啟,8.0版本取消了)急膀,可以redis(阿里的Tair)替代

    • 日志記錄(binlog二進(jìn)制日志沮协,glog---通用日志,需要人為開啟)

  • 存儲(chǔ)引擎層:相當(dāng)于linux文件系統(tǒng)卓嫂,和磁盤交互的模塊

磁盤:xxx.ibd

#連接層
show processlist;

select user,host from mysql.user;

mysql的邏輯結(jié)構(gòu)(==對(duì)象==)

  • 庫(kù)
    • 庫(kù)名
    • 庫(kù)屬性
    • 表名
    • 表屬性
    • 表內(nèi)容/數(shù)據(jù)行
show databases;
use mysql;
show tables;
desc user;

mysql的物理存儲(chǔ)結(jié)構(gòu)(==存儲(chǔ)引擎層==)

    • 一個(gè)表就是一個(gè)段(分區(qū)表除外)
    • 段可以由1個(gè)或多個(gè)區(qū)構(gòu)成慷暂,但是多個(gè)區(qū)不一定是連續(xù)的
  • 區(qū)/簇
    • 一個(gè)區(qū)胸私,默認(rèn)1M,連續(xù)的64個(gè)pages
    • extent:連續(xù)64pages=1MB
  • 頁(yè)
    • 一個(gè)頁(yè)毫目,默認(rèn)16KB侥衬,連續(xù)的4個(gè)os block,最小的IO單元
    • page:16KB=4個(gè)連續(xù)block


第二天


用戶管理

  • mysql用戶:用戶名@'白名單'
    • ==select user,host,authentication_string from mysql.user;==
create user xinzhan@'localhost';
select user,host from mysql.user;

create user xinzhan@'192.168.1.%'  identified by '123456';
select user,host,authentication_string from mysql.user;

alter user xinzhan@'localhost' identified by '123456';

drop user xinzhan@'localhost';
drop user xinzhan@'192.168.1.%';

8.0版本之前血久,可以通過grant命令突照,建立用戶+授權(quán)


權(quán)限管理

  • 權(quán)限的表現(xiàn)方式
    • ==show privileges;==
  • 授權(quán)、回收權(quán)限操作
    • 語(yǔ)法8.0以前:grant 權(quán)限 on 對(duì)象 to 用戶 identified by '密碼';
    • 語(yǔ)法8.0+
      • create user 用戶 identified by '密碼';
      • grant 權(quán)限 on 對(duì)象 to 用戶;
    • 權(quán)限
      • ALL:管理員
      • 權(quán)限1,權(quán)限2,權(quán)限3,......: 普通用戶(業(yè)務(wù)用戶氧吐,開發(fā)用戶)
      • Grant option:給別的用戶授權(quán)
        • grant 權(quán)限1,權(quán)限2,權(quán)限3,...... on 對(duì)象 to 用戶 identified by '密碼' ==with grant option==;
    • 對(duì)象:庫(kù)讹蘑,表
      • *.*
      • 庫(kù)名.*
      • 庫(kù)名.表名
    • mysql授權(quán)表(擴(kuò)展
      • user---*.*
      • db---庫(kù)名.*
      • tables_priv
      • columns_priv
    • 回收權(quán)限
      • 不能通過重復(fù)授權(quán),修改權(quán)限筑舅,只能通過回收權(quán)限方式進(jìn)行修改座慰,但可以疊加權(quán)限
      • revoke create on app. from app@'192.168.1.%';*
grant all on *.* to xinzhan@'192.168.1.%'  identified  by '123456' with grant option;

select user,host from mysql.user;

#查詢用戶權(quán)限
show grants for xinzhan@'192.168.1.%';
#也可以通過下面語(yǔ)句查看權(quán)限(這個(gè)不一定好用)
select * from mysql.user\G;

grant create,update,select,insert,delete on app.* to app@'192.168.1.%'  identified by '123' 

revoke create on app.*  from app@'192.168.1.%';

超級(jí)管理員忘記密碼怎么辦

/etc/init.d/mysqld stop

service mysqld start --skip-grant-tables (這個(gè)比較靈異)

以前版本的做法:

/etc/init.d/mysqld stop

mysqld_safe --skip-grant-tables &

  • 關(guān)閉數(shù)據(jù)庫(kù)(下面兩種都可以)
    • systemctl stop mysqld
    • service mysqld stop
  • 使用安全模式啟動(dòng)(下面兩種都可以)
    • ==mysqld_safe --skip-grant-tables --skip-networking &==
    • service mysqld start --skip-grant-tables --skip-networking
  • 登錄
    • mysql
    • ==flush privileges;==
      • 手工加載授權(quán)表
    • alter user root@'localhost' identified by '123456';
  • 重啟數(shù)據(jù)庫(kù)到正常模式
    • service mysqld restart

連接管理

  • windows

    • sqlyog
    • workbench
    • navicat
  • linux(mysql自帶客戶端)

    • mysql

      參數(shù)列表:

      -u 用戶名

      -p 密碼

      -S 本地socket文件位置

      -h 數(shù)據(jù)庫(kù)ip地址

      -P 數(shù)據(jù)庫(kù)端口號(hào)

      -e 免交互執(zhí)行數(shù)據(jù)庫(kù)命令

      < 導(dǎo)入sql腳本

    • mysqldump

    • mysqladmin

  • api driver

==show processlist==


初始化配置管理

  • 源碼安裝,編譯過程中設(shè)置初始化參數(shù)
  • 配置文件:數(shù)據(jù)庫(kù)啟動(dòng)之前翠拣,設(shè)定配置文件參數(shù)(/etc/my.cnf)
  • 啟動(dòng)腳本命令行

配置文件的應(yīng)用

  • 配置文件讀取順序
    • mysqld --help --verbose |grep my.cnf
  • 手動(dòng)定制配置文件位置
    • ==mysqld --defaults-file=/opt/my.cnf &==
      • mysqld_safe --defaults-file=/opt/my.cnf &

啟動(dòng)和關(guān)閉

調(diào)用關(guān)系(流程)

service mysqld start/stop/restart

systemctl start/stop/restart mysqld

? support-file/mysql.server

? mysqld_safe:?jiǎn)?dòng)時(shí)可以臨時(shí)設(shè)定參數(shù)

? mysqld:?jiǎn)?dòng)時(shí)可以臨時(shí)設(shè)定參數(shù)


臨時(shí)設(shè)定參數(shù)

  • --skip-grant-tables
  • --skip-networking
  • --defaults-file=/xxx/my.cnf
  • --port=xxx

啟動(dòng)

? systemctl start mysqld---> mysql.server--->mysql_safe--->mysqld

關(guān)閉

  • systemctl stop mysqld
  • service mysqld stop
  • mysqladmin -uroot -pxxx shutdown
  • mysql -uroot -p xxx -e "shutdown"

mysql的多實(shí)例

同版本的多實(shí)例

  • 規(guī)劃
    • 軟件一份版仔,
    • 配置文件3份,/data/330{7..9}/my.cnf
    • 數(shù)據(jù)目錄3份心剥,/data/330{7..9}
    • 初始化數(shù)據(jù)3次邦尊,
    • 日志目錄3份,/binlog/330{7..9}
    • socket文件3份优烧,/tmp/mysql330{7..9}.sock
    • 端口3個(gè)蝉揍,port=3307,3308,3309
    • server_id3個(gè),service_id=7,8,9
  • 配制過程
    • 創(chuàng)建需要的目錄
    • 創(chuàng)建配置文件
    • 初始化數(shù)據(jù)
    • 準(zhǔn)備啟動(dòng)腳本
    • 啟動(dòng)多實(shí)例
mkdir -p /data/330{7..9}/data
mkdir -p /binlog/330{7..9}

cat > /data/3307/my.cnf <<EOF
[mysqld]
basedir=/app/database/mysql
datadir=/data/3307/data
socket=/tmp/mysql3307.sock
log_error=/data/3307/mysql.log
port=3307
server_id=7
log_bin=/binlog/3307/mysql-bin
EOF

cat > /data/3308/my.cnf <<EOF
[mysqld]
basedir=/app/database/mysql
datadir=/data/3308/data
socket=/tmp/mysql3308.sock
log_error=/data/3308/mysql.log
port=3308
server_id=8
log_bin=/binlog/3308/mysql-bin
EOF

cat > /data/3309/my.cnf <<EOF
[mysqld]
basedir=/app/database/mysql
datadir=/data/3309/data
socket=/tmp/mysql3309.sock
log_error=/data/3309/mysql.log
port=3307
server_id=7
log_bin=/binlog/3309/mysql-bin
EOF

chown -R mysql.mysql /data   /binlog
mv /etc/my.cnf /etc/my.cnf.bak
mysqld  --initialize-insecure --user=mysql  --basedir=/app/database/mysql --datadir=/data/3307/data
mysqld  --initialize-insecure --user=mysql  --basedir=/app/database/mysql --datadir=/data/3308/data
mysqld  --initialize-insecure --user=mysql  --basedir=/app/database/mysql --datadir=/data/3309/data

cat > /etc/systemd/system/mysqld3307.service  << EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/app/database/mysql/bin/mysqld --defaults-file=/data/3307/my.cnf
LimitNOFILE = 5000
EOF

cat > /etc/systemd/system/mysqld3308.service  << EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/app/database/mysql/bin/mysqld --defaults-file=/data/3308/my.cnf
LimitNOFILE = 5000
EOF

cat > /etc/systemd/system/mysqld3309.service  << EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/app/database/mysql/bin/mysqld --defaults-file=/data/3309/my.cnf
LimitNOFILE = 5000
EOF

systemctl start mysqld3307
systemctl start mysqld3308
systemctl start mysqld3309
netstat  -tulpn  |grep  330

不同版本的多實(shí)例

  • 軟連接不同版本軟件,修改環(huán)境變量
  • 準(zhǔn)備不同目錄
  • 準(zhǔn)備配置文件
  • 初始化數(shù)據(jù)
  • 準(zhǔn)備啟動(dòng)腳本
cd /app/database
ln -s mysql-5.6.46-.*  mysql56
ln -s mysql-8.0.18-.*  mysql80
mv /etc/my.cnf /etc/my.cnf.bak

vim /etc/profile
#注釋以下信息
#export PATH=/app/database/mysql/bin:$PATH
    
#export  PATH=/app/database/mysql/bin:$PATH
#export  PATH=/app/database/mysql56/bin:$PATH
#export  PATH=/app/database/mysql80/bin:$PATH
###三選其一

mkdir -p /data/331{7..8}/data
mkdir -p /binlog/331{7..8}
chown -R mysql.mysql /data/* /binlog/*

cat > /data/3317/my.cnf <<EOF
[mysqld]
basedir=/app/database/mysql56
datadir=/data/3317/data
socket=/tmp/mysql3317.sock
log_error=/data/3317/mysql.log
port=3317
server_id=17
log_bin=/binlog/3317/mysql-bin
EOF

cat > /data/3318/my.cnf <<EOF
[mysqld]
basedir=/app/database/mysql80
datadir=/data/3318/data
socket=/tmp/mysql3318.sock
log_error=/data/3318/mysql.log
port=3318
server_id=18
log_bin=/binlog/3318/mysql-bin
EOF

#5.6
/app/database/mysql56/scripts/mysql_install_db --user=mysql --basedir=/app/database/mysql56 --datadir=/data/3317/data

#8.0
/app/database/mysql80/bin/mysqld --initialize-insecure --user=mysql --basedir=/app/database/mysql80 --datadir=/data/3318/data

cat > /etc/systemd/system/mysqld3317.service  << EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/app/database/mysql56/bin/mysqld --defaults-file=/data/3317/my.cnf
LimitNOFILE = 5000
EOF

cat > /etc/systemd/system/mysqld3318.service  << EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/app/database/mysql80/bin/mysqld --defaults-file=/data/3318/my.cnf
LimitNOFILE = 5000
EOF

systemctl start mysqld3317
systemctl start mysqld3318
netstat  -tulpn  |grep  331

vim /etc/profile
export PATH=/app/database/mysql/bin:$PATH

source /etc/profile
mysql -S /tmp/mysql3317.sock
#mysql5.7本地客戶端可以兼容不同版本的mysqld(5.6畦娄,8.0)
mysql -S /tmp/mysql3318.sock

第三天


sql基礎(chǔ)

  • sql常用類型
    • mysql客戶端自帶的
      • help---不屬于sql語(yǔ)句
    • server端分類命令
      • ==help contents==
        • help Data Definition
          • help DROP DATABASE
      • 分類(記前三)
        • DDL:數(shù)據(jù)定義語(yǔ)言---Data Definition
        • DCL:數(shù)據(jù)控制語(yǔ)言
        • DML:數(shù)據(jù)操作語(yǔ)言
        • DQL:數(shù)據(jù)查詢語(yǔ)言
  • sql的各種名詞
    • sql_mode---sql模式
      • 規(guī)范sql語(yǔ)句書寫方式
      • ==select @@sql_mode;==
      • 版本5.6和5.7差別很大又沾,5.7以后差不過一樣
    • 字符集(charset)及校對(duì)規(guī)則(collation)
      • 字符集:==show charset==
        • utf8:最大存儲(chǔ)長(zhǎng)度,單個(gè)字符最多3個(gè)字節(jié)
        • utf8mb4:5.6版本才出現(xiàn)熙卡,現(xiàn)在建議都要用這個(gè)編碼杖刷;最大存儲(chǔ)長(zhǎng)度,單個(gè)字符最多4個(gè)字節(jié)
        • create database zabbix ==charset utf8mb4==;
        • ==show create database zabbix;==
      • 校對(duì)規(guī)則
        • 每種字符集驳癌,有多種校對(duì)規(guī)則(排序規(guī)則)
        • ==show collation;==
        • select ASCII('A');

數(shù)據(jù)類型

  • 數(shù)字

    • 整數(shù)
      • tinyint:存儲(chǔ)長(zhǎng)度=1B
      • int:4B
      • bigint:8B
    • 小數(shù)
  • 字符串

    • char(長(zhǎng)度):定長(zhǎng)字符串類型滑燃,最多255個(gè)字節(jié)
    • varchar(長(zhǎng)度):變長(zhǎng)字符串類型,最多65535個(gè)字節(jié)
      • 除了存儲(chǔ)字符串之外颓鲜,還會(huì)額外使用1-2字節(jié)存儲(chǔ)字符長(zhǎng)度
    • enum('bj',sh):枚舉
    • 字符串類型選擇會(huì)影響索引應(yīng)用
    • 對(duì)于英文和數(shù)字表窘,每個(gè)字符占一個(gè)字節(jié)長(zhǎng)度
    • 對(duì)于中文(utf8,uft8mb4)甜滨,每個(gè)字符占三個(gè)字節(jié)
      • uft8mb4字符集中==emoji字符乐严,占4個(gè)字節(jié)長(zhǎng)度==
    • ==select length(column_name) from table_name;==
  • 時(shí)間

    • datetime:范圍為從 1000-01-01 00:00:00.000000 至 9999-12-31 23:59:59.999999
      • 占8個(gè)字節(jié)
    • timestamp:1970-01-01 00:00:00.000000 至 2038-01-19 03:14:07.999999。timestamp會(huì)受到時(shí)區(qū)的影響
      • 占4個(gè)字節(jié)
    • img
  • 二進(jìn)制

  • json

    • 版本8.0才有的
create database xinzhan charset  utf8mb4;
use xinzhan;
create table t1(id int,name  varchar(64),age tinyint);
show tables;
desc  t1;

約束

  • Primary Key---PK
    • 主鍵約束衣摩。作用:唯一+非空
    • 每一張表只能有一個(gè)主鍵昂验,最為聚簇索引
  • not null
    • 非空約束,必須非空
    • 建議每個(gè)列都設(shè)置非空
  • unique key
    • 唯一約束,必須不重復(fù)的值
  • unsigned
    • 針對(duì)數(shù)字列既琴,非負(fù)數(shù)

其他屬性

  • default
    • 默認(rèn)值
  • comment
    • 注釋
  • auto_increment

sql應(yīng)用

client

  • \c:結(jié)束上條命令運(yùn)行
  • ==\G==:格式化輸出
  • help
  • \q:退出mysql會(huì)話---ctrl+d
  • source:導(dǎo)入sql腳本占婉,類似于<
  • system:調(diào)用linux命令

==Server==

  • DDL:數(shù)據(jù)定義語(yǔ)言

    • 庫(kù)定義:庫(kù)名 庫(kù)屬性

      • 創(chuàng)建庫(kù):==create database xxx charset utf8mb4;==
      • 查庫(kù)
        • ==show database;==
        • ==show create databae xxx;==
      • 修改庫(kù):==alter database xxx charset utf8mb4;==
        • 庫(kù)名是不能修改的
      • 刪除庫(kù):==drop database xxx;==
    • 表定義

      • 創(chuàng)建表

        • CREATE TABLE stu(
              id      INT NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '學(xué)號(hào)',
              sname   VARCHAR(255) NOT NULL COMMENT '姓名',
              sage    TINYINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '年齡',
              sgender ENUM('m','f','n') NOT NULL DEFAULT 'n' COMMENT '性別' ,
              sfz     CHAR(18) NOT NULL UNIQUE  COMMENT '身份證',
              intime  TIMESTAMP NOT NULL DEFAULT NOW() COMMENT '入學(xué)時(shí)間'
          ) ENGINE=INNODB CHARSET=utf8 COMMENT '學(xué)生表';
          
          ###或者如下
          CREATE TABLE stu(
              id      INT NOT NULL  AUTO_INCREMENT COMMENT '學(xué)號(hào)',
              sname   VARCHAR(255) NOT NULL COMMENT '姓名',
              sage    TINYINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '年齡',
              sgender ENUM('m','f','n') NOT NULL DEFAULT 'n' COMMENT '性別' ,
              sfz     CHAR(18) NOT NULL UNIQUE  COMMENT '身份證',
              intime  TIMESTAMP NOT NULL DEFAULT NOW() COMMENT '入學(xué)時(shí)間',
             PRIMARY KEY(id)
          ) ENGINE=INNODB CHARSET=utf8 COMMENT '學(xué)生表';
          
      • 查詢表

        • ==show tables;==
        • ==desc table_name;==
        • ==show create table table_name;==
      • 修改表

        • ==alter table table_name add [column] column_name bigint not null unique key comment '注釋';==
        • ==alter table table_name modify column_name char(11) not null unique key comment '注釋';==
        • ==alter table table_name drop column_name;==
      • 刪除表:==drop table table_name;==


第四天


DDL

線上ddl(alter)操作對(duì)于生產(chǎn)的影響

sql審核平臺(tái):yearing inception

說明:在mysql中,ddl語(yǔ)句在對(duì)表進(jìn)行操作時(shí)呛梆,是要==鎖元數(shù)據(jù)表==的锐涯。此時(shí)磕诊,所有修改類的命令無(wú)法正常運(yùn)行

==所以==:在對(duì)于大表填物,業(yè)務(wù)繁忙的表,進(jìn)行線上ddl操作時(shí)霎终,要謹(jǐn)慎滞磺。盡量避開業(yè)務(wù)員繁忙期間,進(jìn)行ddl

==``建議使用`:pt-online-schema-change(pt-osc) gh-ost 工具進(jìn)行ddl操作莱褒,減少鎖表的影響==

  • pt-osc工具的使用==击困??广凸?==
    • 往表中加列
  • pt-osc的工作原理
  • pt-osc簡(jiǎn)書

PerconaToolKit


DCL(略)

  • grant
  • revoke

DML

表中數(shù)據(jù)行進(jìn)行操作

  • insert
    • ==insert into table_name (column_name,xxx,......) values(xxx,xxx,......);==
    • 簡(jiǎn)約方法
    • 部分錄入數(shù)據(jù)
    • 批量錄入方式
      • ==insert into table_name (column_name,xxx,......) values(xxx,xxx,......),(xxx,xxx,......),(xxx,xxx,......);==
  • update
    • 修改指定數(shù)據(jù)行的值阅茶,必須要明確要改哪一行,一般update語(yǔ)句都要有where的條件
      • update table_name set column_name=xxx where column_name1=xxx;
    • 如果沒有指定某行谅海,那就是全表的數(shù)據(jù)行都修改
  • delete
    • 刪除指定數(shù)據(jù)行的值脸哀,必須要明確要?jiǎng)h哪些行,一般delete語(yǔ)句都要有where的條件
      • delete from table_name where column_name=xxx;

==偽刪除==

修改表結(jié)構(gòu)扭吁,添加state狀態(tài)列

==alter table table_name add column state tinyint not null default 1;==

刪除數(shù)據(jù)改為update

==update table_name set state=0 where column_name=xxx;==

查詢語(yǔ)句改為:

==select * from table_name where state=1;==

delete from table_name,drop table table_name,truncate table table_name 區(qū)別撞蜂?

  1. 以上三條命令都可以刪除全表數(shù)據(jù)
    • delete邏輯上是逐行刪除。數(shù)據(jù)行多侥袜,操作很慢蝌诡。并沒有真正從磁盤中刪除,只是在存儲(chǔ)層面打標(biāo)記枫吧,磁盤空間不立即釋放
      • HWM高水位線不會(huì)降低
      • 全表掃描和數(shù)據(jù)頁(yè)大量碎片會(huì)影響
    • drop將表結(jié)構(gòu)(元數(shù)據(jù))和==數(shù)據(jù)行==物理層次刪除
    • truncate清空表==段==中的所有==數(shù)據(jù)頁(yè)==浦旱。物理層次刪除==全表==數(shù)據(jù),磁盤空間立即釋放九杂,HWM高水位線會(huì)降低

DQL

  • select

    • select配合內(nèi)置函數(shù)使用
      • select now();
      • select database();
      • select concat('xxx');
        • select concat(user,'@',host) from mysql.user;
      • select version();
      • select user();
    • 計(jì)算
      • select 10*100;
    • 查詢數(shù)據(jù)庫(kù)的參數(shù)
      • select @@port;
      • select @@socket;
      • select @@datadir;
      • select @@innodb_flush_log_at_trx_commit;
  • ==select標(biāo)準(zhǔn)用法==(配合其他子句使用)

    • 單表

      • select
          from 表1,表2,......
          where 過濾條件1 過濾條件2 ......
          group by 條件列1 條件列2 ......
              select_list 列名列表
          having 過濾條件1 過濾條件2 ......
          order by 條件列1 條件列2 ......
          limit 限制
          
                                              
        ###where在group by之前颁湖;
        

      having在group by+聚合函數(shù)之后,再做判斷過濾使用

      
      - **select * from world.city where countrycode in ('CHN','USA') and population>5000000;**
      
      - ==group by 配合聚合函數(shù)使用==
      
      - ```sql
        select district,sum(population),count(id),group_concat(name)
        from world.city
        where countrycode='CHN'
        group by district;
        
        
        ```
      
      - **having子句---==后過濾==**
      
      - ```sql
        select district,sum(population)
        from world.city
        where countrycode='CHN'
        group by district
        having sum(population)>5000000;
        ```
      
      - **order by子句---排序**
      
      - ```sql
        select district,sum(population)
        from world.city
        where countrycode='CHN'
        group by district
        having sum(population)>5000000
        order by sum(population) desc;
        ```
      
      - limit子句
      
      - 分頁(yè)顯示結(jié)果集
      
      - ```mysql
        select district,sum(population)
        from world.city
        where countrycode='CHN'
        group by district
        having sum(population)>5000000
        order by sum(population) desc
        limit 5;
        
        ###limit 2,3---前面是跳過前2行尼酿,后面是顯示3行
        ###limit 3 offset 2
        
        ```
      
      
  • ==多表鏈接查詢==

    • use school
      student :學(xué)生表
      sno:    學(xué)號(hào)
      sname:學(xué)生姓名
      sage: 學(xué)生年齡
      ssex: 學(xué)生性別
      
      teacher :教師表
      tno:     教師編號(hào)
      tname:教師名字
      
      course :課程表
      cno:  課程編號(hào)
      cname:課程名字
      tno:  教師編號(hào)
      
      score  :成績(jī)表
      sno:  學(xué)號(hào)
      cno:  課程編號(hào)
      score:成績(jī)
      
      ###項(xiàng)目構(gòu)建
      drop database school;
      CREATE DATABASE school CHARSET utf8;
      USE school
      
      CREATE TABLE student(
      sno INT NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '學(xué)號(hào)',
      sname VARCHAR(20) NOT NULL COMMENT '姓名',
      sage TINYINT UNSIGNED  NOT NULL COMMENT '年齡',
      ssex  ENUM('f','m') NOT NULL DEFAULT 'm' COMMENT '性別'
      )ENGINE=INNODB CHARSET=utf8;
      
      CREATE TABLE course(
      cno INT NOT NULL PRIMARY KEY COMMENT '課程編號(hào)',
      cname VARCHAR(20) NOT NULL COMMENT '課程名字',
      tno INT NOT NULL  COMMENT '教師編號(hào)'
      )ENGINE=INNODB CHARSET utf8;
      
      CREATE TABLE sc (
      sno INT NOT NULL COMMENT '學(xué)號(hào)',
      cno INT NOT NULL COMMENT '課程編號(hào)',
      score INT  NOT NULL DEFAULT 0 COMMENT '成績(jī)'
      )ENGINE=INNODB CHARSET=utf8;
      
      CREATE TABLE teacher(
      tno INT NOT NULL PRIMARY KEY COMMENT '教師編號(hào)',
      tname VARCHAR(20) NOT NULL COMMENT '教師名字'
      )ENGINE=INNODB CHARSET utf8;
      
      INSERT INTO student(sno,sname,sage,ssex)
      VALUES (1,'zhang3',18,'m');
      
      INSERT INTO student(sno,sname,sage,ssex)
      VALUES
      (2,'zhang4',18,'m'),
      (3,'li4',18,'m'),
      (4,'wang5',19,'f');
      
      INSERT INTO student
      VALUES
      (5,'zh4',18,'m'),
      (6,'zhao4',18,'m'),
      (7,'ma6',19,'f');
      
      INSERT INTO student(sname,sage,ssex)
      VALUES
      ('oldboy',20,'m'),
      ('oldgirl',20,'f'),
      ('oldp',25,'m');
      
      
      INSERT INTO teacher(tno,tname) VALUES
      (101,'oldboy'),
      (102,'hesw'),
      (103,'oldguo');
      
      DESC course;
      INSERT INTO course(cno,cname,tno)
      VALUES
      (1001,'linux',101),
      (1002,'python',102),
      (1003,'mysql',103);
      
      DESC sc;
      INSERT INTO sc(sno,cno,score)
      VALUES
      (1,1001,80),
      (1,1002,59),
      (2,1002,90),
      (2,1003,100),
      (3,1001,99),
      (3,1003,40),
      (4,1001,79),
      (4,1002,61),
      (4,1003,99),
      (5,1003,40),
      (6,1001,89),
      (6,1003,77),
      (7,1001,67),
      (7,1003,82),
      (8,1001,70),
      (9,1003,80),
      (10,1003,96);
      
      SELECT * FROM student;
      SELECT * FROM teacher;
      SELECT * FROM course;
      SELECT * FROM sc;
      
      ### 統(tǒng)計(jì)zhang3,學(xué)習(xí)了幾門課
      SELECT st.sno,st.sname , COUNT(sc.cno)
      FROM student AS st
      JOIN sc
      ON st.sno=sc.sno
      WHERE st.sname='zhang3' 
      group by st.sno,st.sname;
      
      ### 查詢zhang3,學(xué)習(xí)的課程名稱有哪些(這個(gè)是先join再過濾爷狈,但是內(nèi)連接的驅(qū)動(dòng)表由優(yōu)化器決定)
      SELECT st.sno,st.sname , group_concat(course.cname)
      FROM student AS st
      JOIN sc
      ON st.sno=sc.sno
      join course
      on sc.cno=course.cno
      WHERE st.sname='zhang3' 
      group by st.sno,st.sname;
      
      
      #### 優(yōu)化上一條sql語(yǔ)句(驅(qū)動(dòng)表student,先過濾裳擎,再left join)
      SELECT st.sno,st.sname , group_concat(course.cname)
      FROM student AS st
      left JOIN sc
      ON st.sno=sc.sno
      join course
      on sc.cno=course.cno
      WHERE st.sname='zhang3' 
      group by st.sno,st.sname;
      
      ### http://www.reibang.com/p/08c4b78402ff
      
    • 笛卡爾乘積

      • select * from teacher ,course;
      • select * from teacher join course;
    • ==內(nèi)連接==

      • ==select * from teacher join course on teacher.tno=course.tno;==

      • A join B

        ? on A.xxx=B.yyy

    • 外連接

      • left join:左表所有數(shù)據(jù)涎永,右表滿足條件的數(shù)據(jù)
      • right join:右表所有數(shù)據(jù),左表滿足條件的數(shù)據(jù)

聚合函數(shù)

max() min() avg() count() sum() group_concat()---列轉(zhuǎn)行


  • 將結(jié)果集小的表(是針對(duì)整個(gè)語(yǔ)句)設(shè)置為驅(qū)動(dòng)表更加合適,可以降低next loop的次數(shù)

  • 對(duì)于內(nèi)連接來講羡微,我們是沒法控制驅(qū)動(dòng)表是誰(shuí)谷饿,完全由優(yōu)化器決定

  • 如果,需要人為干預(yù)妈倔,需要將內(nèi)連接改為外連接

  • select別名---as

    • 列別名
      • 可以定制顯示的列名
      • 可以在having博投,order by子句中調(diào)用
    • 表別名
      • 全局調(diào)用定義的別名
  • select的去重---distinct

  • select的union 和union all

    • 聚合兩個(gè)結(jié)果集

    • union去重聚合的兩個(gè)結(jié)果集

    • select * from world.city where countrycode='CHN'
      union all
      select * from world.city where countrycode='USA';
      
      ###上面的sql語(yǔ)句比下面的語(yǔ)句效率好
      select * from world.city where countrycode in ('CHN','USA');
      select * from world.city where countrycode='CHN' or countrycode='USA';
      
      
      
  • show---mysql獨(dú)有的

    • ==show variables;==

      • 顯示mysql中所有的參數(shù)信息
    • ==show variables like '%trx%'==

    • help show;
      show databases;
      show tables;
      
      ###
      show tables from database_name;
      
      show processlist;
      show full processlist;
      show charset;
      show collation;
      show engines;
      
      show privileges;
      show grants for ......
      show create database ......
      show create table ......
      
      show index from ......
      
      show engine innodb status;
      show status;
      show status like '%xxx%';
      show variables;
      show variables '%xxx%';
      
      show binary logs;
      show binlog events in
      show master status
      
      show slave status;
      show relaylog events in
      

第五天


==元數(shù)據(jù)==

表(邏輯表)

  • 數(shù)據(jù)字典:表中列的定義信息(元數(shù)據(jù))
    • myisam:xxx.frm
    • innodb
      • 8.0之前:xxx.frm+ibdata1
      • 8.0之后:xxx.frm
  • 數(shù)據(jù)行記錄(真實(shí)數(shù)據(jù))
    • myisam:xxx.myd
    • innodb:xxx.ibd
  • 索引(真實(shí)數(shù)據(jù))
    • myisam:xxx.myi
    • innodb:xxx.ibd
  • 數(shù)據(jù)庫(kù)狀態(tài)
    • mysql庫(kù)
    • ==I_S==---information_schema:視圖
      • 可以查詢數(shù)據(jù)字典、數(shù)據(jù)庫(kù)狀態(tài)盯蝴、權(quán)限
      • 放在內(nèi)存中的(內(nèi)存庫(kù))
    • P_S
    • SYS庫(kù)
  • 權(quán)限(元數(shù)據(jù))
    • mysql.user
    • mysql.db
    • mysql.table
    • mysql.column
    • ......
  • 日志:專門日志文件

I_S--內(nèi)存庫(kù)

每次數(shù)據(jù)庫(kù)啟動(dòng)毅哗,會(huì)自動(dòng)在內(nèi)存中生成I_S,生成查詢mysql部分元數(shù)據(jù)信息==視圖==捧挺。

I_S中的視圖虑绵,保存的是查詢?cè)獢?shù)據(jù)的方法,不保存數(shù)據(jù)本身

create view v_select as 
select district,sum(population)
from world.city
where countrycode='CHN'
group by district
having sum(population)>5000000
order by sum(population) desc
limit 5;

select  * from v_select;

use information_schema;
show tables;

# tables是個(gè)表(I_S)
desc tables闽烙;


I_S.tables---內(nèi)存表

==保存了所有表的數(shù)據(jù)字典信息==翅睛,是個(gè)視圖(內(nèi)存中的表),有如下字段(僅介紹部分---常用的):

  • TABLE_SCHEMA:表所在的庫(kù)
  • TABLE_NAME:表名
  • ENGINE:表的引擎
  • TABLE_ROWS:表的數(shù)據(jù)行(不是實(shí)時(shí)的值)
  • AVG_ROW_LENGTH:平均行長(zhǎng)度
  • DATA_LENGTH:表使用的存儲(chǔ)空間大泻诰骸(不是實(shí)時(shí)的值)
  • INDEX_LENGTH:表中索引占用空間大小
  • DATA_FREE:表中是否有碎片
### 數(shù)據(jù)庫(kù)資產(chǎn)統(tǒng)計(jì)
#### 一捕发、統(tǒng)計(jì)每個(gè)庫(kù)下的所有表的個(gè)數(shù),表名列表
select table_schema,count(table_name),group_concat(table_name)
from information_schema.tables
group by table_schema;

#### 二很魂、統(tǒng)計(jì)每個(gè)庫(kù)的占用空間總大小
##### 1.一張表的大小=AVG_ROW_LENGTH*TABLE_ROWS+INDEX_LENGTH
##### 2.一張表的大小=DATA_LENGTH
##### 單位是B(字節(jié))
select table_schema,sum(AVG_ROW_LENGTH*TABLE_ROWS+INDEX_LENGTH)
from information_schema.tables
group by table_schema;

#### 三扎酷、查詢業(yè)務(wù)數(shù)據(jù)庫(kù)(系統(tǒng)庫(kù)除外),所有非innodb表
##### 系統(tǒng)庫(kù):information_schema莫换,mysql霞玄,performance_schema,sys
select table_schema,table_name
from information_schema.tables
where engine!='InnoDB'
and table_schema not in ('sys','performance_schema','information_schema','mysql');

#### 四拉岁、查詢業(yè)務(wù)數(shù)據(jù)庫(kù)(系統(tǒng)庫(kù)除外)坷剧,所有非innodb表。將非innodb表改為innodb表
select concat('alter table ',table_schema,'.',table_name,' engine=innodb;')
from information_schema.tables
where engine!='InnoDB'
and table_schema not in ('sys','performance_schema','information_schema','mysql')
into outfile '/tmp/alter.sql';
##### 需要在/etc/my.cnf的[mysqld]中添加secure-file-priv=/tmp喊暖,然后重啟數(shù)據(jù)庫(kù)

cat > /etc/my.cnf <<EOF
[mysqld]
secure-file-priv=/tmp
user=mysql
basedir=/app/databae/mysql
datadir=/data/3306
server_id=6
port=3306
socket=/tmp/mysql.sock
[mysql]
socket=/tmp/mysql.sock
EOF


一些練習(xí)

### 1.查詢oldguo老師教的學(xué)生名.
SELECT concat(te.tname,'_',te.tno) ,GROUP_CONCAT(st.sname)
FROM teacher AS te
JOIN course
ON te.tno=course.tno
JOIN sc
ON course.cno=sc.cno
JOIN student AS st
ON sc.sno=st.sno
WHERE te.tname='oldguo'
group by te.tno,te.tname;

### 2.查詢oldguo所教課程的平均分?jǐn)?shù)
SELECT concat(te.tname,'_',te.tno,'_',course.cname,'_',course,cno) ,avg(sc.score)
FROM teacher AS te
JOIN course
ON te.tno=course.tno
JOIN sc
ON course.cno=sc.cno
WHERE te.tname='oldguo'
group by te.tno,te.tname,course.cno;

### 3.每位老師所教課程的平均分,并按平均分排序
SELECT concat(te.tname,'_',te.tno,'_',course.cname,'_',course,cno) ,avg(sc.score)
FROM teacher AS te
JOIN course
ON te.tno=course.tno
JOIN sc
ON course.cno=sc.cno
group by te.tno,te.tname,course.cno
order by avg(sc.score) desc;

### 4.查詢oldguo所教的不及格的學(xué)生姓名
SELECT concat(te.tname,'_',te.tno),group_concat(concat(st.sname,':',st.score))
FROM teacher AS te
JOIN course
ON te.tno=course.tno
JOIN sc
ON course.cno=sc.cno
JOIN student AS st
ON sc.sno=st.sno
where te.tname='oldguo' and sc.score<60
group by te.tno,te.tname;

### 5.查詢所有老師所教學(xué)生不及格的信息
SELECT concat(te.tname,'_',te.tno),group_concat(concat(st.sname,':',st.score))
FROM teacher AS te
JOIN course
ON te.tno=course.tno
JOIN sc
ON course.cno=sc.cno
JOIN student AS st
ON sc.sno=st.sno
where sc.score<60
group by te.tno,te.tname;

### 6.查詢平均成績(jī)大于60分的同學(xué)的學(xué)號(hào)和平均成績(jī)
select sc.sno,avg(sc.score)
from sc
group by sc.sno
having avg(sc.score)>60;

### 7.查詢所有同學(xué)的學(xué)號(hào)惫企、姓名、選課數(shù)陵叽、總成績(jī)
select st.sno,st.sname,count(sc.cno),sum(sc.score) 
from student as st
join sc
on st.sno=sc.sno
group by st.sno,st.sname;

### 8.查詢各科成績(jī)最高和最低的分:以如下形式顯示:課程ID狞尔,最高分,最低分
select sc.cno,max(sc.score),min(sc.score)
from sc
group by sc.cno;

### 9.統(tǒng)計(jì)各位老師,所教課程的及格率
SELECT concat(te.tname,'_',te.tno,'_',course.cname,'_',course,cno) ,concat(count(case when sc.score>60 then 1 end)/count(sc.score)*100,'%') as '及格率'
FROM teacher AS te
JOIN course
ON te.tno=course.tno
JOIN sc
ON course.cno=sc.cno
group by te.tno,te.tname,course.cno;

### 10.查詢每門課程被選修的學(xué)生數(shù)
### 11.查詢出只選修了一門課程的全部學(xué)生的學(xué)號(hào)和姓名
### 12.查詢選修課程門數(shù)超過1門的學(xué)生信息
### 13.統(tǒng)計(jì)每門課程:優(yōu)秀(85分以上),良好(70-85),一般(60-70),不及格(小于60)的學(xué)生列表
select course.cname,
group_concat(case sc.score>85 then st.sname end) as '優(yōu)秀',
group_concat(case sc.score>70 and sc.score<=85 then st.sname end) as '良好',
group_concat(case sc.score>60 and sc.score<=70 then st.sname end) as '一般',
group_concat(case sc.score<60 then st.sname end) as '不及格'
from course
join sc
on course.cno=sc.cno
join student as st
on sc.sno=st.sno
group by course.cname;

### 14.查詢平均成績(jī)大于85的所有學(xué)生的學(xué)號(hào)巩掺、姓名和平均成績(jī) 

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末偏序,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子胖替,更是在濱河造成了極大的恐慌研儒,老刑警劉巖豫缨,帶你破解...
    沈念sama閱讀 212,542評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異端朵,居然都是意外死亡好芭,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門冲呢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來舍败,“玉大人,你說我怎么就攤上這事敬拓×谑恚” “怎么了?”我有些...
    開封第一講書人閱讀 158,021評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵恩尾,是天一觀的道長(zhǎng)弛说。 經(jīng)常有香客問我挽懦,道長(zhǎng)翰意,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,682評(píng)論 1 284
  • 正文 為了忘掉前任信柿,我火速辦了婚禮冀偶,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘渔嚷。我一直安慰自己进鸠,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,792評(píng)論 6 386
  • 文/花漫 我一把揭開白布形病。 她就那樣靜靜地躺著客年,像睡著了一般。 火紅的嫁衣襯著肌膚如雪漠吻。 梳的紋絲不亂的頭發(fā)上量瓜,一...
    開封第一講書人閱讀 49,985評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音途乃,去河邊找鬼绍傲。 笑死,一個(gè)胖子當(dāng)著我的面吹牛耍共,可吹牛的內(nèi)容都是我干的烫饼。 我是一名探鬼主播,決...
    沈念sama閱讀 39,107評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼试读,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼杠纵!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起钩骇,我...
    開封第一講書人閱讀 37,845評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤比藻,失蹤者是張志新(化名)和其女友劉穎骇塘,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體韩容,經(jīng)...
    沈念sama閱讀 44,299評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡款违,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,612評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了群凶。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片插爹。...
    茶點(diǎn)故事閱讀 38,747評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖请梢,靈堂內(nèi)的尸體忽然破棺而出赠尾,到底是詐尸還是另有隱情,我是刑警寧澤毅弧,帶...
    沈念sama閱讀 34,441評(píng)論 4 333
  • 正文 年R本政府宣布气嫁,位于F島的核電站,受9級(jí)特大地震影響够坐,放射性物質(zhì)發(fā)生泄漏寸宵。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,072評(píng)論 3 317
  • 文/蒙蒙 一元咙、第九天 我趴在偏房一處隱蔽的房頂上張望梯影。 院中可真熱鬧,春花似錦庶香、人聲如沸甲棍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)感猛。三九已至,卻和暖如春奢赂,著一層夾襖步出監(jiān)牢的瞬間陪白,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評(píng)論 1 267
  • 我被黑心中介騙來泰國(guó)打工呈驶, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留拷泽,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,545評(píng)論 2 362
  • 正文 我出身青樓袖瞻,卻偏偏與公主長(zhǎng)得像司致,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子聋迎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,658評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容

  • 修改用戶 mysql> alter user root@'localhost' identified by '12...
    不知道就閱讀 900評(píng)論 0 0
  • SQL介紹 結(jié)構(gòu)化的查詢語(yǔ)言脂矫,關(guān)系型數(shù)據(jù)庫(kù)通用的命令,遵循SQL92的標(biāo)準(zhǔn)(SQL_MODE) SQL常用種類 D...
    大仙兒沒溜兒閱讀 434評(píng)論 0 0
  • 數(shù)據(jù)類型1.1 作用 控制數(shù)據(jù)的規(guī)范性捞奕,讓數(shù)據(jù)有具體含義,在列上進(jìn)行控制1.2 種類1) 字符串 char(32)...
    浪子_lucy閱讀 162評(píng)論 0 0
  • 接昨天----->>> 9. DCL grant revoke 10. DML語(yǔ)句 10.1 作用: 針對(duì)表的數(shù)據(jù)...
    StandingBy_abc閱讀 170評(píng)論 0 0
  • 久違的晴天拄轻,家長(zhǎng)會(huì)颅围。 家長(zhǎng)大會(huì)開好到教室時(shí),離放學(xué)已經(jīng)沒多少時(shí)間了恨搓。班主任說已經(jīng)安排了三個(gè)家長(zhǎng)分享經(jīng)驗(yàn)院促。 放學(xué)鈴聲...
    飄雪兒5閱讀 7,515評(píng)論 16 22