【mysql简单用法】

常见数据类型

整数型
tinyint(m) 1个字节 范围(-128~127)
smallint(m) 2个字节 范围(-32768~32767)
mediumint(m) 3个字节 范围(-8388608~8388607)
int(m) 4个字节 范围(-2147483648~2147483647)
bigint(m) 8个字节 范围(+-9.22*10的18次方)

#取正值
tinyint unsigned
浮点型
float(m,d) 单精度浮点型 8位精度(4字节) m总个数,d小数位
double(m,d) 双精度浮点型16位精度(8字节) m总个数,d小数位
#设一个字段定义为float(6,3),如果插入一个数123.45678,实际数据库里存的是123.457,但总个数还以实际为准,即6位
字符串
char(n) 固定长度,最多255个字符
varchar(n) 可变长度,最多65535个字符
tinytext 可变长度,最多255个字符
text 可变长度,最多65535个字符
mediumtext 可变长度,最多224次方-1个字符
longtext 可变长度,最多232次方-1个字符
BINARY(M) 固定长度,可存二进制或字符,长度为0-M字节
VARBINARY(M) 可变长度,可存二进制或字符,允许长度为0-M字节
内建类型:ENUM枚举, SET集合
char和varchar的区别
char是固定长度,varchar是可变但有最值,定义4个字节情况下显示空
char固定占4个字节,varchar只占一个字节
数据大小差不多用char,大小不一用varchar
看情况来使用

varchar和text

TEXT以文本方式存储,英文存储区分大小写
text类型不能有默认值
varchar可直接创建索引,text创建索引要指定前多少个字符。varchar查询速度快于text
日期时间类型
  • DATE: 用来表示年、月、日。日期 ‘2008-12-2’
  • TIME: 用来表示时、分、秒。时间 ‘12:25:36’
  • DATETIME : 用来表示年、月、日、时、分、秒。日期时间 ‘2008-12-2 22:06:44’
  • YEAR: 用来表示年
  • TIMESTAMP: 自动存储记录修改时间,可以存放这条记录最后被修改的时间
修饰符
#适用所有类型的修饰符:
NULL                       #数据列可包含NULL值,默认值
NOT NULL                   #数据列不允许包含NULL值,*为必填选项,不能为空
DEFAULT                    #默认值
PRIMARY KEY                #主键,所有记录中此字段的值不能重复,且不能为NULL
UNIQUE KEY                 #唯一键,所有记录中此字段的值不能重复,但可以为NULL
CHARACTER SET name         #指定一个字符集
comment '描述'              #添加描述

#适用数值型的修饰符:
AUTO_INCREMENT             #自动递增,适用于整数类型
UNSIGNED                   #无符号

SQL指令

语句分类

  • DDL: Data Defination Language 数据定义语言

    CREATE,DROP,ALTER

  • DML: Data Manipulation Language 数据操纵语言

    INSERT,DELETE,UPDATE

  • DQL:Data Query Language 数据查询语言

    SELECT

  • DCL:数据控制语言

  • TCL:事务控制语言

查看命令帮助
help contents    #总目录,需要细看就找目录下的具体命令
#官方文档
https://dev.mysql.com/doc/refman/8.0/en/sql-statements.html
基于帮助完成添加testdb库,字符集utf8, 排序集合utf8_bin
mysql> help create database
Name: 'CREATE DATABASE'
Description:
Syntax:
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name
    [create_option] ...

create_option: [DEFAULT] {
    CHARACTER SET [=] charset_name
  | COLLATE [=] collation_name
  | ENCRYPTION [=] {'Y' | 'N'}
}

CREATE DATABASE creates a database with the given name. To use this
statement, you need the CREATE privilege for the database. CREATE
SCHEMA is a synonym for CREATE DATABASE.

URL: https://dev.mysql.com/doc/refman/8.0/en/create-database.html

mysql> create database testdb character set utf8 collate utf8_bin;
Query OK, 1 row affected, 2 warnings (0.01 sec)

mysql> show create database testdb;
+---------+-------------------------------------------------------------------------------------------------------------------+
|Database | Create Database                                                                                                   |
+---------+-------------------------------------------------------------------------------------------------------------------+
|testdb   |CREATE DATABASE `testdb` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_bin */ /*!80016 DEFAULT ENCRYPTION='N' */|
+---------+-------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
更改c/s端的默认字符集为utf8mb4
vim /etc/my.cnf
 
[mysqld]
character-set-server=utf8mb4
 
[client]
default-character-set=utf8mb4

systemctl restart mysqld

[root@localhost ~]#mysql
mysql> SHOW VARIABLES LIKE '%char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8mb4                    |
| character_set_connection | utf8mb4                    |
| character_set_database   | utf8mb4                    |
| character_set_filesystem | binary                     |
| character_set_results    | utf8mb4                    |
| character_set_server     | utf8mb4                    |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
创建一个主机表host,放在testdb中,

要求:

  1. 主键自增id 无符号, tinyint.
  2. hostname可变字符长度256,可为空。。
  3. ip 可变字符长度256,可为空。
  4. 账号,可变字符长度256,可为空。
  5. 密码,可变字符长度256,可为空。
  6. 创建时间,时间类型,非空。
  7. 更新时间,时间类型,默认当前时间。
  8. 区域,只能在华南,华北,华东,三个区域之一。
  9. 端口,无符号整数,可为空。
  10. 外网地址,可变字符长度256,可为空。
  11. 内网地址,可变字符长度256,可为空。
mysql> use testdb
Database changed
mysql> create table host (id tinyint unsigned primary key auto_increment, hostname varchar(256) null,ip varchar(256) null,password varchar(256),account varchar(256),creationtime datetime not null,updatetime datetime,region enum('south china','north china','east china'),port tinyint unsigned,internetaddress varchar(256),insidenetwork varchar(256) );
Query OK, 0 rows affected (0.01 sec)
 
mysql> show tables;
+------------------+
| Tables_in_testdb |
+------------------+
| host             |
+------------------+
1 row in set (0.00 sec)
 
mysql> desc host;
+-----------------+------------------------------------------------+------+-----+---------+----------------+
| Field           | Type                                           | Null | Key | Default | Extra          |
+-----------------+------------------------------------------------+------+-----+---------+----------------+
| id              | tinyint unsigned                               | NO   | PRI | NULL    | auto_increment |
| hostname        | varchar(256)                                   | YES  |     | NULL    |                |
| ip              | varchar(256)                                   | YES  |     | NULL    |                |
| password        | varchar(256)                                   | YES  |     | NULL    |                |
| account         | varchar(256)                                   | YES  |     | NULL    |                |
| creationtime    | datetime                                       | NO   |     | NULL    |                |
| updatetime      | datetime                                       | YES  |     | NULL    |                |
| region          | enum('south china','north china','east china') | YES  |     | NULL    |                |
| port            | tinyint unsigned                               | YES  |     | NULL    |                |
| internetaddress | varchar(256)                                   | YES  |     | NULL    |                |
| insidenetwork   | varchar(256)                                   | YES  |     | NULL    |                |
+-----------------+------------------------------------------------+------+-----+---------+----------------+
11 rows in set (0.00 sec)
给testdb.host表中添加多条数据。
mysql>  insert into host (id,creationtime,region) values(1,now(),'north china');
Query OK, 1 row affected (0.00 sec)
 
mysql>  insert into host (creationtime,region) values(now(),'east china');
Query OK, 1 row affected (0.00 sec)
 
mysql>  insert into host (creationtime,region) values(now(),'south china');
Query OK, 1 row affected (0.00 sec)
 
mysql> select * from host;
mysql> select * from host;
+----+----------+------+----------+---------+---------------------+------------+-------------+------+-----------------+---------------+
| id | hostname | ip   | password | account | creationtime        | updatetime | region      | port | internetaddress | insidenetwork |
+----+----------+------+----------+---------+---------------------+------------+-------------+------+-----------------+---------------+
|  1 | NULL     | NULL | NULL     | NULL    | 2023-05-26 11:46:26 | NULL       | north china | NULL | NULL            | NULL          |
|  2 | NULL     | NULL | NULL     | NULL    | 2023-05-26 11:47:41 | NULL       | east china  | NULL | NULL            | NULL          |
|  3 | NULL     | NULL | NULL     | NULL    | 2023-05-26 11:47:54 | NULL       | south china | NULL | NULL            | NULL          |
+----+----------+------+----------+---------+---------------------+------------+-------------+------+-----------------+---------------+
3 rows in set (0.00 sec)

总结DDL, DML的用法,并配上示例

表DDL
创建表
#定义表里相对应的列,创建学生信息表
create table student (                                #创建新表命名student,()里面是相对应的列及对应的赋值
id tinyint unsigned primary key auto_increment ,      #人数取正值,按照范围选取,设置主键,主键是不允许为空的,自动递增
name char(4) not null,                                #名字定义字符宽度4,不能为空
gender char(1),                                       #性别定义字符宽度1,也可写成enum('F','M')要么F要么M
age tinyint unsigned );                               #年龄,取正值,按照范围选取

#用select user.host from mysql.user;查看的信息来创建新的表teacher,带有表结构和数据
create table teacher select user.host from mysql.user;

#拷贝student的表结构命名为emp表,不拷贝数据
create table emp like student;
查看表
show tables;                       #列出当前所在数据库的所有表
desc student;                      #查看student表的结构
select * from student;             #查看student表内容
show table status\G                #将所有表横着显示\G  
show table status like 'emp' \G    #查看单个表状态信息
select count(*) from student;      #统计表里的记录数量
删除表
drop table student;   #删除student表
增删改表DML
增加、插入insert
#1
insert into student (id,name,gender,age) values(1,'韦小升','M',20),(2,'魏晓声','M',22);   #可同时多个
#into可不写,意为指定表
#第一个括号里的次序决定了第二个括号的次序
#values具体值,留意字符集和表结构赋值

#2
insert student set name='韦小升',gender='M',age=18

#3,将其他表信息导入新表里,表结构需相同
insert emp select * from student;

#当具体数值未知时可不写或者赋值null

insert ignore 会忽视数据库中已经存在的数据,根据主键或者唯一索引判断,如果数据库没有数据,就会插入新的数据,如果有数据的话就跳过这条数据

root:test> select * from t3;
    +----+------+------+------+
    | id | c1   | c2   | c3   |
    +----+------+------+------+
    |  1 |    1 | a    |    1 |
    |  2 |    2 | a    |    1 |
    |  8 | NULL | NULL |    1 |
    | 14 |    4 | bb   | NULL |
    | 17 |    5 | cc   |    4 |
    +----+------+------+------+
    5 rows in set (0.00 sec)

insert ignore into t3 (c1,c2,c3) values(5,'cc',4),(6,'dd',5);

root:test> select * from t3;
+----+------+------+------+
| id | c1   | c2   | c3   |
+----+------+------+------+
|  1 |    1 | a    |    1 |
|  2 |    2 | a    |    1 |
|  8 | NULL | NULL |    1 |
| 14 |    4 | bb   | NULL |
| 17 |    5 | cc   |    4 |
| 18 |    6 | dd   |    5 |
+----+------+------+------+
6 rows in set (0.00 sec)
修改表update
update student set age = 19 where id = 4;   
#指定表student,指定修改值set age = 19,指定修改哪一行或者哪一个目标where
#修改表student里的id为4的行的age值为19
删除delete
dekete from student;                    #删除整个student表
dekete from student where age >=20;     #指定删除age的值>=20的行,序号会不连续,新添加值不会插在删除的行位置,而是在最下面继续递增,可update更改
防止误删除,添加条件才可删除
vim /etc/my.cnf
[mysql]
safe-updates

删除表中数据,但不会自动缩减数据文件的大小,释放表空间

OPTIMIZE TABLE stubent;

#清空表也会释放空间
TRUNCATE TABLE stubent;

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值