MySQL语句

针对记录的SQL语句


记录: 表中的一行一行的数据称之为是一条记录

先有库---->表---->记录

 

一、操作库

-- 创建库
create database db1;
-- 创建库是否存在,不存在则创建
create database if not exists db1;
-- 查看所有数据库
show databases;
-- 查看某个数据库的定义信息 
show create database db1; 
-- 修改数据库字符信息
alter database db1 character set utf8; 
-- 删除数据库
drop database db1; 


二、操作表
--创建表
create table student(
    id int,
    name varchar(32),
    age int ,
    score double(4,1),
    birthday date,
    insert_time timestamp
);
 

-- 查看表结构
desc 表名;
-- 查看创建表的SQL语句
show create table 表名;
-- 修改表名
alter table 表名 rename to 新的表名;
-- 添加一列
alter table 表名 add 列名 数据类型;
-- 删除列
alter table 表名 drop 列名;
-- 删除表
drop table 表名;
drop table  if exists 表名 ;

增加数据:

insert into t1 values(1, 'kevin', 20);            # 全字段增加, 单条增加
insert into t1 values(2, 'kevin1', 20),(3, 'kevin2', 20),(4, 'kevin3', 20);       # 批量增加
insert into t1(id, name) values(7, 'kevin7');       # 空的使用NULL填充

修改:

update t1 set name='tank' where id=1;       # set后是修改的内容,where后是修改的条件
update t1 set age=30 where name='tank';
update t1 set name='jerry',age=30 where id=3;         # 可以同时修改两个条件
update t1 set name='oscar' where name='tank' and age=30;       # and 同时满足
update t1 set name='oscar' where name='kevin3' or name='kevin4';     # or 或者
update t1 set name='tony';       # 没有条件,全部修改

update t1 set age=age+40 where id=1;      # 在原有age数字的基础上+40

   """以后再自行更新和删除的sql语句的时候,一定要细心、好好看看你的条件是否正确"""

删除:

    delete from t1 where id=1;
    delete from t1 where id=2 or id=7;
    delete from t1;       # 这是清空表

配置文件的使用

#  修改字符编码,防止乱码

mysql的配置文件是:my-default.ini---->复制一份---->重新命名my.ini

#  修改了配置文件,一定别忘了重启服务端才能生效

[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8


存储引擎的使用(理论,重要)

# 存储引擎就是存储数据的方式 ,MySQL支持多少种存储引擎方式

# 查看存储引擎:show engines;

一共九种存储引擎,重点学习:MyISAM、MEMORY、InnoDB

MYISAM: 是MySQL5.5版本及之前的版本默认的存储引擎、它的读取速度很快相比较与                        InnoDB,但是它的数据安全性较低,相对于InnoDB存储引擎
                   不支持事务、支持的是表锁
InnoDB:是MySQL5.6及之后的版本默认的存储引擎、它的读取速度相对慢一些,但是数                     据的安全性较高一些
                   支持:事务transactions、行锁row_level locking、外键foreign keys 
MEMORY: 是基于内存存储的,意味着断电数据丢失、重启服务端数据就丢失

# 演示:

create table t2 (id int, name varchar(64)) engine=MyISAM;    # 指定存储引擎
create table t3 (id int, name varchar(64)) engine=InnoDB;
create table t4 (id int, name varchar(64)) engine=MEMORY;   

# 数据存在data目录里,

# 对于不同的存储引擎,硬盘中保存的文件个数也是不一样的
MyISAM:3个文件—— .frm 存储表结构
                                      .MYD 存储的是表数据
                                      .MYI 存索引(当成是字典的目录,加快查询速度)
InnoDB:2个文件——.frm 存储表结构
                                    .ibd 存储数据和索引
MEMORY:1个文件—— .frm 存储表结构

数据类型之整型


#  整型: 存储整数的

               tinyin、smallint、int、bigint 
# 不同的数据类型区别就是所存储的范围不一样
    tinyint: 它是使用一个字节来保存数据,一个字节代表8位,256种情况(0-255) (-128-127)
    smallint : 2个字节, 代表16位, 65536(0-65535) (-32768-32767)
    mediumint : 3个字节
    int : 4个字节,2**32=42....(-21...- 21...)
    bigint : 8个字节(最大的) 可以存手机号(11)
# 选数据类型看存什么,尽量合情合理

create table t5 (id tinyint);   # 创建表
insert into t5 values(256);     # 增加数据

结论是:带符号的,所有的整型默认都是带符号的 减半
# 怎么样去掉符号:create table t6 (id tinyint unsigned);

数据类型之浮点型


         float、double、decimal
float(255, 30)       # 总位数是255位、小数点后60位
double(255, 30)   # 总位数是255位、小数点后60位
decimal(65, 30)   # 总位数是255位、小数点后60位

create table t7 (id float(255, 30));
create table t8 (id double(255, 30));
create table t9 (id decimal(65, 30));
    
insert into t7 values (1.11111111111111111111111111);
insert into t8 values (1.11111111111111111111111111);
insert into t9 values (1.11111111111111111111111111);

结论:三者的精确度不一样:decimal   >  double   >  float(精确到7位了)
    """就我多年的经验来看,大家都选decimal"""
    price decimal(8,2)    # 999.99    总长度是8位,小数占两位

数据类型之字符串(重要)

char(4): 定长类型,超出4位,就报错,不够4位,使用空格填充
varchar(4): 可变长类型,超出4位,报错,不够4位的,有几位存几位 

create table t10 (id int, name char(4));
create table t11 (id int, name varchar(4));
insert into t10 values(1, 'jerry');
insert into t11 values(1, 'jerry');

# 如果你想超出范围之后,直接报错,需要设置严格模式
    sql_mode
    show variables like "%mode%";
# 设置严格模式
    1. 命令行模式:临时修改
    set global sql_mode='STRICT_TRANS_TABLES'; # 不区分大小写
    2. 配置文件修改:永久修改,保存,重启  

#研究定长和不定长

create table t12 (id int, name char(4));
create table t13 (id int, name varchar(4));
insert into t12 values(1, 'ke');
insert into t13 values(1, 'ke');

#验证是否补充了空格
    select char_length(name) from t12;
    select char_length(name) from t13;
默认情况下,没有对char类型填充空格,如果想看填充了空格,需要设置严格模式
# 设置严格模式:1. 命令行模式:临时修改
    set global sql_mode='STRICT_TRANS_TABLES,PAD_CHAR_TO_FULL_LENGTH'; 
   2. 配置文件修改:永久修改

数据类型之日期和枚举


日期:date(年月日)、datetim(年月日时分秒)、time(时分秒)、year(年) 

create table t14 (        # 写多了可以分多行
    id int, 
    reg_time date, 
    reg1_time datetime, 
    reg2_time time, 
    reg3_time year);    
insert into t14 values(1, '2023-10-1', '2023-11-11 11:11:11', '11:11:11', 2023);


枚举:


# 多选一:enum

只能存这里面中的其中一个,不然报错

create table t15 (id int, hobby enum('read', 'music', 'tangtou', 'xijio'));
insert into t15 values(1, 'read');
 # 多选多:包含多选一   set 

create table t16 (id int, hobby set('read', 'music', 'tangtou', 'xijio'));
insert into t16 values(2, 'read,music1');

你可能感兴趣的:(python,mysql,开发语言)