mysql基础入门_thankszmy的博客

Peter20
• 阅读 1089

一、MYSQL 安装

下载完后,我们将 zip 包解压到相应的目录,这里我将解压后的文件夹放在 C:\web\mysql-8.0.15-winx64 下。

打开刚刚解压的文件夹 C:\web\mysql-8.0.15-winx64,在该文件夹下创建 my.ini 配置文件,编辑 my.ini 配置以下基本信息:

[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8

[mysqld]
# 设置3306端口
port = 3306
# 设置mysql的安装目录
basedir=C:\\web\\mysql-8.0.11
# 设置 mysql数据库的数据的存放目录,MySQL 8+ 不需要以下配置,系统自己生成即可,否则有可能报错
# datadir=C:\\web\\sqldata
# 允许最大连接数
max_connections=20
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB

1.以管理员身份打开 cmd 命令行工具,切换目录:

cd C:\web\mysql-8.0.15-winx64\bin

2.初始化数据库:

mysqld --initialize --console

3.输入以下安装命令:

mysqld install

4.启动输入以下命令即可:

net start mysql

注意: 在 5.7 需要初始化 data 目录:

cd C:\web\mysql-8.0.15-winx64\bin 
mysqld --initialize-insecure 

初始化后再运行 net start mysql 即可启动 mysql。

二、登录 MySQL

mysql -h 主机名 -u 用户名 -p

参数说明:

  • -h : 指定客户端所要登录的 MySQL 主机名, 登录本机(localhost 或 127.0.0.1)该参数可以省略;
  • -u : 登录的用户名;
  • -p : 告诉服务器将会使用一个密码来登录, 如果所要登录的用户名密码为空, 可以忽略此选项。

如果我们要登录本机的 MySQL 数据库,只需要输入以下命令即可:

mysql -u root -p

按回车确认, 如果安装正确且 MySQL 正在运行, 会得到以下响应: 密码:w9V9V)#+!r0u

Enter password:

若密码存在, 输入密码登录, 不存在则直接按回车登录。登录成功后你将会看到 Welecome to the MySQL monitor... 的提示语。

然后命令提示符会一直以 mysq> 加一个闪烁的光标等待命令的输入, 输入 exit 或 quit 退出登录。

三、MYSQL连接

以下是从命令行中连接mysql服务器的简单实例:

[root@host]# mysql -u root -p
Enter password:******

在登录成功后会出现 mysql> 命令提示窗口,你可以在上面执行任何 SQL 语句。

使用 PHP 脚本连接 MySQL

mysqli_connect(host,username,password,dbname,port,socket);

参数描述

mysql基础入门_thankszmy的博客

mysql基础入门_thankszmy的博客

四、创建数据库

CREATE DATABASE 数据库名;

使用 mysqladmin 创建数据库

mysql> create DATABASE RUNOOB;

使用普通用户,你可能需要特定的权限来创建或者删除 MySQL 数据库。

所以我们这边使用root用户登录,root用户拥有最高权限,可以使用 mysql mysqladmin 命令来创建数据库。

以下命令简单的演示了创建数据库的过程,数据名为 RUNOOB:

[root@host]# mysqladmin -u root -p create RUNOOB
Enter password:******

以上命令执行成功后会创建 MySQL 数据库 RUNOOB。

使用root登录后,可以使用

CREATE DATABASE IF NOT EXISTS RUNOOB DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

创建数据库,该命令的作用:

    1. 如果数据库不存在则创建,存在则不创建。
    1. 创建RUNOOB数据库,并设定编码集为utf8

五、删除数据库

删除数据库

drop database <数据库名>

mysql> drop database RUNOOB;

使用 mysqladmin 删除数据库

[root@host]# mysqladmin -u root -p drop RUNOOB
Enter password:******

使用PHP脚本删除数据库

mysqli_query(connection,query,resultmode);

mysql基础入门_thankszmy的博客

六、选择数据库

mysql 选择数据库

eg:  mysql -uroot -p

      123456

mysql>use RUNOOB
就此就选择了 RUNOOB数据库,在后续的操作中,都是在RUNOOB中执行,

注意:所有的字段,表名,都是区分大小写的

使用php脚本选择mysql 数据库

mysql\_select\_db(connection,dbname)

eg:mysql基础入门_thankszmy的博客

mysql基础入门_thankszmy的博客

七、mysql 数据类型

一个字符占多少长度与编码有关

UTF-8:一个汉字=3个字节

GBK:一个汉字=2个字节

2、varchar(n) 表示 n 个字符,无论汉字和英文,Mysql 都能存入 n 个字符,仅是实际字节长度有所区别

3、MySQL 检查长度,可用 SQL 语言来查看:

select LENGTH(fieldname) from tablename

整型

mysql基础入门_thankszmy的博客

取值范围如果加了 unsigned,则最大值翻倍,如 tinyint unsigned 的取值范围为(0~255)。

2、浮点型(float 和 double)

mysql基础入门_thankszmy的博客

设一个字段定义为 float(5,3),如果插入一个数 123.45678,实际数据库里存的是 123.457,但总个数还以实际为准,即 6 位。

3、定点数

浮点型在数据库中存放的是近似值,而定点类型在数据库中存放的是精确值。

decimal(m,d) 参数 m<65 是总个数,d<30 且 d<m 是小数位。

4、字符串(char,varchar,_text)

mysql基础入门_thankszmy的博客

char 和 varchar:

  • 1.char(n) 若存入字符数小于n,则以空格补于其后,查询之时再将空格去掉。所以 char 类型存储的字符串末尾不能有空格,varchar 不限于此。
  • 2.char(n) 固定长度,char(4) 不管是存入几个字符,都将占用 4 个字节,varchar 是存入的实际字符数 +1 个字节(n<=255)或2个字节(n>255),所以 varchar(4),存入 3 个字符将占用 4 个字节。
  • 3.char 类型的字符串检索速度要比 varchar 类型的快。

varchar 和 text:

  • 1.varchar 可指定 n,text 不能指定,内部存储 varchar 是存入的实际字符数 +1 个字节(n<=255)或 2 个字节(n>255),text 是实际字符数 +2 个字节。

  • 2.text 类型不能有默认值。

  • 3.varchar 可直接创建索引,text 创建索引要指定前多少个字符。varchar 查询速度快于 text, 在都创建索引的情况下,text 的索引似乎不起作用。

    5.二进制数据(_Blob)

  • 1._BLOB和_text存储方式不同,_TEXT以文本方式存储,英文存储区分大小写,而_Blob是以二进制方式存储,不分大小写。

  • 2._BLOB存储的数据只能整体读出。

  • 3._TEXT可以指定字符集,_BLO不用指定字符集。

    6.日期时间类型

    mysql基础入门_thankszmy的博客

    若定义一个字段为timestamp,这个字段里的时间数据会随其他字段修改的时候自动刷新,所以这个数据类型的字段可以存放这条记录最后被修改的时间。

    数据类型的属性

    mysql基础入门_thankszmy的博客

    八、mysql 创建数据表

mysql 创建数据表,需要以下信息

1.表名,

2.表字段名,

3.定义每个表字段

创建mysql数据表的语法

CREATE TABLE table_name (column_name column_type);

eg: RUNOOB 数据库中创建数据表runoob_tbl:

mysql> CREATE TABLE runoob_tbl(
   -> runoob_id INT NOT NULL AUTO_INCREMENT,
   -> runoob_title VARCHAR(100) NOT NULL,
   -> runoob_author VARCHAR(40) NOT NULL,
   -> submission_date DATE,
   -> PRIMARY KEY ( runoob_id )
   -> )ENGINE=InnoDB DEFAULT CHARSET=utf8;

php脚本创建表

mysqli_query(connection,query,resultmode); 

mysql基础入门_thankszmy的博客

查询表字段

  desc  <表名> 

八、删除数据表

   语法
  DROP TABLE table\_name ;
  使用PHP脚本删除数据表、
   mysqli\_query(connection,query,resultmode);
  ![](https://img-hello-world.oss-cn-beijing.aliyuncs.com/b453e8c1aa90a1057811f51b0de43508.png)

删除表内数据,用delete,格式为:

delete from 表名 where 删除条件

eg:删除学生表内姓名为张三的记录

 delete from student where t\_name = "张三";

清除表内数据,保存表结构,用truncate.格式为:

truncate table 表名;

eg:清除学生表内的所有数据

truncate table student;

删除表用drop,就是啥都没了,格式为:

drop table 表名

eg:删除学生表

 drop table student;

1、当你不需要该表时,用drop

2、当你仍要保留该表,但是要删除所有记录时,用truncate;

3、当你删除部分记录时,用delete.

九、mysql插入数据

 语法
 INSERT INTO table\_name (field1,field2,...fieldN)  VALUES(value1,value2,..valueN)
  如果数据是字符型,必须使用单引号或者双引号,如:"value"。

 eg: INSERT INTO runoob\_tbl

       (runoob\_title,runoob\_author,submission\_date)

      VALUES

      ('study php','cainiao',NOW());

     读取数据表
    select \* from runoob\_tbl;
    使用php脚本插入数据
     mysqli\_query(connection,query,resultmode);
    ![](https://img-hello-world.oss-cn-beijing.aliyuncs.com/7664ecf8ad54a49ea41023d380796182.png)

十、mysql 查询数据

   语法:
  SELECT column\_name,column\_name

  From table\_name

  \[WHERE Clause\]

  \[LIMIT N\] \[OFFSET M\]
  • 查询语句中你可以使用一个或者多个表,表之间使用逗号(,)分割,并使用WHERE语句来设定查询条件

  • SELECT 命令可以读取一条或者多条记录

  • 你可以使用星号(*)来代替其他字段,SELECT 语句会返回表的所有字段数据

  • 你可以使用WHERE 语句来包含任何条件

  • 你可以使用LIMIT 属性来设定返回的记录数

  • 你可以通过OFFSET指定SELECT 语句开始查询的数据偏移量,默认情况下偏移量为0

    十一、mysql where 子句


  语法:

  SElECT field1,field2,...fieldN, FROM table\_name1,table\_name2..

   \[WHERE condition1 \[AND \[OR\]\] condition2...\]
  • 查询语句你可以使用一个或者多个表,表之间用,隔开,并使用where 语句来设定查询条件

  • 你可以在where 子句中指定任何条件

  • 你可以使用AND 或者 OR 指定一个或多个条件

  • WHERE子句也可以运用于SQL的DELETE 或者UPDATE 命令

  • WHERE 子句类似于程序语言中的if 条件,根据mysql表中的字段值来读取指定的数据

    where 子句的操作符

    mysql基础入门_thankszmy的博客

    使用主键来作为WHERE子句的条件查询是非常快速的

    如果给定的条件在表中没有任何匹配的记录,那么查询不会返回任何数据

    eg:select * from runoob_tbl where runoob_author='cainiao';

mysql 的where 子句的字符串比较式不区分大小写的,你可以使用BINARY 来设定where子句的字符串比较是区大小写的

十二、mysql update查询

语法:

 UPDATE table\_name SET field1= new -value1,field2=new -value2

 \[WHERE Clause\]

  你可以同时更新一个或多个字段

  你可以在WHERE 子句中指定任何条件

  你可以在一个表中同时更新数据

  当你需要更细数据表中指定行的数据时,WHERE子句是非常有用的。

  eg: UPDATE runoob\_tbl SET runoob\_title='study c++'  WHERE runoob\_id=3;

  再次查询:select \* from runoob\_tbl WHERE runoob\_id=3;

    update 语句可用来修改表中的数据,简单来说基本的使用形式为:

   update 语句可用来修改表中的数据, 简单来说基本的使用形式为:

    update 表名称 set 列名称=新值 where 更新条件;

  十三、mysql delete 语句

       语法

       DELETE FROM table\_name \[WHERE Clause\]

       如果没有指定WHERE子句,mysql 表中所有的记录将被删除

        你可以在WHERE子句中指定任何条件

       您可以在单个表中一次性删除记录

      eg:delete from runoob\_tbl where runoob\_id=1;

      delete from 表名称 where 删除条件

       delete drop truncate 都有删除表的作用,区别在于:

       delete 和 truncate 仅仅删除表输几局,drop连表数据表结构一起删除,delete 是单杀,truncate是团灭,drop是把电脑摔了

       十四、mysql LIKE

               意义:有时后我们需要获取runoob\_author 字段含有"com"字符的所有记录,这是我们就需要再WHERE 子句中使用SQL LIKE子句

              语法;

                select field1,field2,field3...fieldN, from table\_name where field1,LIKE condition \[AND\[OR\]\] filed2 ='somevalue'

                 LIKE 通常与%一同使用,类似于一个元字符的搜索

                  ![](https://img-hello-world.oss-cn-beijing.aliyuncs.com/7823108362e9853a3f4c5aadc480be85.png)

 like 匹配/模糊匹配,会与%和\_结合使用

    ‘![](https://img-blog.csdnimg.cn/20190222125314289.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3RoYW5rc3pteQ==,size_16,color_FFFFFF,t_70)’

     十五、MYSQL UNION 操作符

          mysql union 操作符用于连接2个以上的select 语句的结果组合到一个结果结合中去,多个select 语句会删除重复的数据
           select expression1,expression2,expression3,,,expression\_n

           from tables;

          \[where conditions\]

            union \[all |distinct\]

          select expression1,expression2,,,expression\_n

          FROM tables;

         \[WHERE conditions\]
           expression1,expression2,expressionn,要检索的列

           tables; 要检索到的数据表

           where conditions:可选,检索条件

            DISINCT:可选,删除结果集中重复的数据,默认情况下UNION操作符已经删除了重复数据,所以DISTINCT 修饰符对结果没啥影响

          ALL:可选,返回所有结果集,包含重复数据,

           eg: select country from websites

               union all

            select country from apps;

              order by country

          UNION 语句:用于将不同表中相同列中查询的数据展示出来(不包括重复数据)

          UNION ALL 语句:用于将不同表中相同列中查询的数据展示出来 (包括重复数据)

         SELECT 列名称 FROM 表名称 UNION SELECT 列名称 FROM 表名称 ORDER BY 列名称

       SELECT 列名称 FROM 表名称 UNION  ALL SELECT 列名称 FROM 表名称 ORDER BY 列名称

            十六、mysql 排序

             select field1,field2,..fieldn table\_name1 table\_name2... order by field1,field2,\[field2...\]\[ASC \[DESC\]\]

               你可以使用任何条件来作为排序的条件,从而返回排序后的查询结果

               你可以设定多个字段来排序,

               你可以使用ASC或者DESC 关键字来设定查询结果,是按升序或者降序排列,

               你可以添加where...like 子句来设置条件

               eg:select \* from runoob\_tbl order by submission\_date ASC

              mysql 拼音排序,如果字符集采用的是gbk(汉字编码字符集,直接在查询语句中后面添加order by

              select \* from runoob\_tbl

              order by runoob\_title;

               如果字符集采用的是urtf8,需要先对字段进行转码然后排序

                select \* from runoob\_tbl order by  convert(runoob\_title using gbk);

         十七、mysql GROUP BY

                  GROUP BY 语句根据一个或者多个列对结果进行分组
                 selelct column\_name ,function(column)

                  FROM table\_name

                  WHERE column\_name operator value

                  GROUP BY column\_name;
      group by 可以实现一个最简单的去重查询,假设想看下有哪些员工,除了用distinct 外,还可以用

     select name from employee\_tbl group by name;

      返回的结果集就是所有员工的名字

    分组后的条件使用HAVING 来限定,where 是对原始数据进行条件限制,几个关键字的使用顺序为where、

    group by having,order by 

        select name,sum(\*) from employee\_tbl where id <> 1 group by name HAVing sum(\*) >5 order by sum(\*)  desc;

             ![](https://img-blog.csdnimg.cn/20190224115835518.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3RoYW5rc3pteQ==,size_16,color_FFFFFF,t_70)

mysql基础入门_thankszmy的博客

mysql基础入门_thankszmy的博客

十八、mysql 连接的使用
INNER JOIN(内连接,或等值连接) 获取两个表中字段匹配的记录
LEFT JOIN (左连接) 获取左表所有记录,及时右表没有对应匹配的记录
RIGHT JOIN(右连接) 与left join 想反,用于获取右表所有记录,即使左表没有对应匹配的记录

eg: select a.runoob_id,a.runoob_author,b.runoob_count from runoob_tbl a,tcount_tbl b where a.runoob_author = b.runoob_author

十九、mysql null值处理

is  null :当列的值是null ,此运算符返回true

is not null 当列的值不为null ,运算符返回true,

mysql基础入门_thankszmy的博客

  二十、mysql 正则表达

   ![](https://img-hello-world.oss-cn-beijing.aliyuncs.com/2de79e2a3743a3fb3510fdaceec09220.png)

   eg:

         查找name 字段中以‘st’ ,为开头的所有数据

          select name FROM person\_tbl where name REGEXP '^st' 

         查找name 字段中以‘ok’ 为结尾的所有数据

         select name FROM person\_tbl where name REGEXP 'ok$',

          查找name 字段中包含‘mar’ 字符串中的所有数据

         select name from person\_tbl where name REGEXP 'mar'

         查找name 字段中以元音字符开头或以‘ok’ 字符串结尾的所有数据

         select name from person\_tbl whree name REGEXP '^\[aeiou\] | ok$';

   二十一、mysql 事务

  ![](https://img-hello-world.oss-cn-beijing.aliyuncs.com/578fa5f88a0f3962f23b882968170c6b.png)

   二十二、mysql alert 命令

MYSQL 需要修改数据表名,或者修改数据字段时,就需要用到mysql alter 命令
create table testalter_tbl
( i INT,
c char(1)
)

show columns from testalter_tbl;

删除、添加或者修改字段
alter table testalter_tbl drop i;

如果只剩余一个字段,则无法使用drop 删除字段

mysql 中使用add 子句来向数据表中添加列,如下列在表testalter_tbl中添加i字段,并定义数据类型

ALTER TABLE testalter_tbl ADD i INT;

如果要指定新增字段的位置,可以使用mysql 提供的的关键字first,alter 字段名
尝试以下alter table 语句,在执行成功后,使用show columns 查看表结构变化

ALTER TABLE testalter_tbl DROP i;
ALTER TABLE testalter_tbl ADD i INT FIRST;
ALTER TABLE testalter_tbl DROP i;
ALTER TABLE testalter_tbl ADD i INT AFTER c;

修改字段类型及名称
如果需要修改字段类型及名称,你可以在ALTER命令中使用modify 或change 子句来向数据表中添加列,如下列在表testalter_tbl中添加i字段,并定义数据类

ALTER TBALE testalter_tbl MODIFY c CHAR(10);

使用CHANGE 子句,语法有很大的不同,在CHANGE 关键字之后,紧跟着的是你要修改的字段名,然后指定新字段及名称
ALTER TABLE testalter_tbl CHANGE i j BIGINT;

ALTER TABLE testalter_tbl CHANGE j j INT;

ALTER TABLE 对NULL值和默认值的影响

eg:指定字段j为not null 且默认值为100
ALTER TABLE testalter_tbl
MODIFY j BIGINT NOT NULL DEFAULT 100;

如果不设置默认值,mysql 会自动设置改字段默认值为null,

修改字段默认值
--可以使用alter 来修改字段的默认值,
ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000;
SHOW COLUMNS FROM testalter_tbl;

你可以使用ALTER 命令及DROP 自己来删除字段的默认值
ALTER TABLE testalter_tbl ALTER i DROP DEFAULT;
SHOW COLUMNS FROM testalter_tbl;

修改数据表类型,可以使用alter命令及type子句来完成,尝试以下实例,我们将表testalter_tbl的类型修改为MYISAM;

ALTER TABLE testalter_tbl ENGINE = MYISM;
SHOW TABLE STATUS LIKE 'testalter_tbl';

修改表名
如果需要修改数据表的名称,可以在ALTER TABLE 语句中使用rename子句来实现
eg:ALTER TABLE testalter_tbl RENAME TO alter_tbl;

alter 其他用途:
修改存储引擎,修改为myisam;
alter table tableName engine = myisam;

删除外键约束,keyName 是外键别名

alter table tableName drop foreign key keyName;

修改字段的相对位置:这里name1为想要修改的字段,type1为该字段原来类型 ,first和alter 二选一
这应该显而易见,first 放在第一位,after 放在name2 字段后面

alter table tableName modify name1 type1 first|after name2;

mysql 索引

索引可以大大提高mysql 的检索速度;
创建索引时你需要确保该索引时应用在sql 查询语句的条件

普通索引

创建索引

CREATE INDEX indexName ON mytable(username(length));
如果是char varchar 类型,length可以小于实际字段的长度;如果是BLOB和TEXT类型,必须指定length;

修改表结构(添加索引)
ALTER TABLE tableName ADD INDEX indexName(columnName)

创建表的时候直接指定
CREATE TABLE mytable(
ID INT NOT NULL,
username VARCHAR(16) NOT NULL,
INDEX [indexName] (username(length))
);

删除索引的语法  
DROP INDEX \[indexName\] ON mytable;  

唯一索引  

    创建索引  
     CREATE UNIQUE INDEX indexName ON mytable(username(length))  

    修改表结构  
     ALTER table mytable ADD UNIQUE \[indexName\] (username(length));  

    创建表的时候直接指定  
     CREATE TABLE mytable(  
      ID INT NOT NULL,  
      username VARCHAR(16) NOT NULL,  
      UNIQUE \[indexName\] (username(length))            
      )  

    使用ALTER 命令添加和删除索引  
     有四种方式来添加数据表的索引  
     ALTER TABLE tbl\_name ADD PRIMARY KEY(column\_list)  
     该语句添加一个主键,这就意味着索引值必须是唯一的,且不能为null,  

     ALTER TABLE tbl\_name ADD UNIQUE index\_name(column\_list);这条语句创建的索引的值必须是唯一的,(除了null之外)  

     ALTER TABLE tbl\_name ADD INDEX index\_name(column\_list)添加普通索引,索引值可出现多次  

     ALTER TABLE tbl\_name ADD FULLTEXT index\_name(column\_list);该语句指定了索引为FULLTEXT ,用于全文索引  

     eg:  
          ALTER TABLE testalter\_tbl ADD INDEX(c);  

          还可以在alter 命令中使用drop 子句来删除索引,  
          eg:  ALTER TABLE testalter\_tbl DROP INDEX c;  

    使用ALTER 命令添加和删除主键  
    --主键只能作用于一个列上,添加主键索引时,你要确保该主键默认不能为空(not null)  
    ALTER TABLE testalter\_tbl MODIFY i INT NOT NULL;  
    ALTER TABLE testalter\_tbl ADD PRIMARY KEY(i);  

    也可以使用ALTER 命令删除主键  
     ALTER TABLE testalter\_tbl DROP PRIMARY KEY;  
     删除主键时,只需指定PRIMARY KEY 但在删除索引时,你必须知道索引名  

     显示索引信息  
     --可以使用show index 命令来列出表中的相关的索引信息,可以通过添加G\\来格式化输出信息  
     SHOW INDEX FROM table\_name; \\G  

MYSQL 临时表

当php执行完成之后,该临时表也会自动销毁
--创建mysql 临时表 saleSummary

CREATE TEMPORARY TBALE SaleSumary (
product_name VARCHAR(50) NOT NULL,
total_sales DECIMAL(12,2) NOT NULL DEFAULT 0.00,
total_units_sold INT UNSIGNED NOT NULL DEFAULT 0
);

INSERT INTO SaleSumary
(product_name,total_sales,avg_unit_price,total_units_sold)
VALUES
('cucumber',100.25,90,2)

当使用show tables 命令系那是数据表列表时,你将无法看懂SalesSummary 表  
当你退出 当前mysql 会话,再使用select 来读取原来创建的临时表那你会发现没有该表的存在。  

--删除mysql 临时表  
CREATE TEMPORARY TABLE SaleSumary(  
product\_name VARCHAR(50) NOT NULL,  
total\_sales DECIMAL(12,2) NOT NULL DEFAULT 0.00,  
avg\_unit\_price DECIMAL(7,2) NOT NULL DEFAULT 0.00,  
total\_units\_sold INT UNSIGNED NOT NULL DEFAULT 0  
);  

INSERT INTO saleSummary  
(product\_name,total\_sales,avg\_unit\_price,total\_units\_sold)  
VALUES   
('cucumber',100.25,90,2);

DROP TABLE saleSummary  
SELECT \* FROM SaleSumary;  

--MYSQL 复制表
使用SHOW CREATE TABLE 命令获取创建数据表(create table),该语句包含了数据表的结构,索引等
如果你想复制表的内容,你就可以使用INSERT INTO ...SELECT 语句来实现

复制完整表的的方法
CREATE TABLE targetTable LIKE sourceTable ;
INSERT INTO targetTable SELECT * FROM sourceTable;

其他:
可以拷贝一个表中的一些字段
CREATE TABLE newadmin AS
(
SELECT username,password FROM admin
)

    可以将新建的表的字段改名  
    CREATE TABLE newadmin AS  
    (  
       SELECT id,username AS uname,password AS pass FROM admin  
    )  

    可以拷贝一部分数据  
    CREATE TABLE newadmin AS  
    (  
       SELECT \* FROM admin WHERE LEFT(username,1) = 's'  
    )  

    可以在创建表的同时定义表中的字段信息  
    CREATE TABLE newadmin  
    (  
       id INTEGERR NOT NULL AUTO\_INCREMENT PRIMARY KEY  
    )  
    AS  
    (  
       SELECT \* FROM admin  
    )  

    mysql 复制表结构到新表  
          create table 新表 select \* from 旧表 where 1 =2   
          或者 create table 新表 like 旧表  
          create table 新表 select \* from 旧表  

--MYSQL 序列使用

使用函数创建自增序列管理表

第一步,创建Sequence 管理表 sequence;
DROP TABLE IF EXISTS sequence;
CREATE TABLE sequence (
name VARCHAR(50) NOT NULL,
current_value INT NOT NULL,
increment INT NOT NULL DEFAULT 1,
PRIMARY KEY (name)
) ENGINE=InnoDB;

第二步:创建取当前值的函数 currval
DROP FUNCTION IF EXISTS currval;
DELIMITER $
CREATE FUNCTION currval (seq_name VARCHAR(50))
RETURNS INTEGER
LANGUAGE SQL
DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
DECLARE value INTEGER;
SET value = 0;
SELECT current_value INTO value
FROM sequence
WHERE name = seq_name;
RETURN value;
END
$ DELIMITER ;

第三步:创建取下一个值的函数 nextval
DROP FUNCTION IF EXISTS nextval;
DELIMITER $
CREATE FUNCTION nextval (seq_name VARCHAR(50))
RETURNS INTEGER
LANGUAGE SQL
DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
UPDATE sequence
SET current_value = current_value + increment
WHERE name = seq_name;
RETURN currval(seq_name);
END
$ DELIMITER;

第四步:创建更新当前值的函数 setval
DROP FUNCTION IF EXISTS setval;
DELIMITER $
CREATE FUNCTION setval (seq_name VARCHAR(50), value INTEGER)
RETURNS INTEGER
LANGUAGE SQL
DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
UPDATE sequence
SET current_value = value
WHERE name = seq_name;
RETURN currval(seq_name);
END
$ DELIMITER ;

测试函数功能

INSERT INTO sequence VALUES ('TestSeq', 0, 1);
----添加一个sequence名称和初始值,以及自增幅度 添加一个名为TestSeq 的自增序列

SELECT SETVAL('TestSeq', 10);
---设置指定sequence的初始值 这里设置TestSeq 的初始值为10

SELECT CURRVAL('TestSeq');
--查询指定sequence的当前值 这里是获取TestSeq当前值

SELECT NEXTVAL('TestSeq');
--查询指定sequence的下一个值 这里是获取TestSeq下一个值

--mysql 处理重复数据
你可以在mysql 数据表中设定的字段为PRIMARY key(主键) 或者unique(索引) 来保证数据的唯一性

eg:下面的表允许重复的值出现  
   CREATE TABLE person\_tbl  
   (  
     first\_name CHAR(20),  
     last\_name CHAR(20),  
     sex CHAR(10)  
     );  

     如果你想这只表中的字段first\_name ,last\_name,数据不能重复,你可以设置双主键模式来设置数据的唯一性,如果你设置了双主键,那么那个建的默认值不能为null,可设置成not null,  
     CREATE TABLE person\_tbl  
     (  
      first\_name CHAR(20) NOT NULL,  
      last\_name CHAR(20) NOT NULL,  
      sex CHAR(10),  
      PRIMARY KEY (last\_name,first\_name)  
      );  

      INSERT IGNORE INTO 与 INSERT INTO 的区别就是INSERT IGNORE会忽略数据库中已经存在的数据,如果数据库中没有数据,就插入新的数据,  

      INSERT IGNORE INTO person\_tbl(last\_name,first\_name)  
      values ('jay','Thomas');  
      INSERT IGNORE INTO person\_tbl (last\_name,first\_name)  
      values ('jay','Thomas')  

      INSERT IGNORE INTO 当插入数据时,子设置记录的唯一性后,如果插入重复的值,将不会反悔错误,只以警告的的形式返回,而REPLACE INTO    
      如果存在primary 或unique 相同记录时,则先删除掉,再插入记录  

      CREATE TABLE person\_tbl  
      (  
         first\_name CHAR(20) NOT NULL,  
         last\_name CHAR(20) NOT NULL,  
         sex CHAR(10),  
         UNIQUE (last\_name,first\_name)  
      )  

      --统计重复数据  
         以下,我们将统计表中first\_name ,和last\_name,的重复记录数  

        Select COUNT(\*) as repetitions ,last\_name,first\_name  
        from person\_tbl  
        group by last\_name,first\_name  
        HAVING repetitions >1;  

        以上查询语句将返回person\_tbl 表中重复的记录数,一般情况下,查询重复的值,请执行以下操作  
        确定哪一列包含的值可能会重复  
        在列选择列表使用COUNT(\*) 列出的那些列  
        在GROUP BY 子句找那个列出的列  
        HAVING 子句设置重复复数大于1。  

        过滤重复数据  
             如果你需要读取不重复的数据,可以在select 语句中使用DISTINCT 关键字来过滤重复的数据  
             select distinct last\_name,first\_name  
                from person\_tbl;  
            也可以使用GROUP BY 来读取数据表中不重复的数据;  
              select last\_name,first\_name  
              from person\_tbl  
              GROUP BY(last\_name,first\_name);  

              删除重复数据  
              如果你想删除重复的数据,可以使用  
              create table tmp select last\_name,first\_name,sex,from person\_tbl GROUP BY(last\_name,first\_name,sex);  
              drop table person\_tbl;  
              alter table tmp rename tp person\_tbl;  

              当然你也可以在数据中添加index(索引), 和primary key(主键),这种简单的方式来删除表中的重复记录,  
             alter ignore table person\_tbl  
              add primary key (last\_name,first\_name);

MYSQL 导出数据

--使用select ...into outfile 语句导出数据

select * from runoob_tbl
into outfile '/tmp/runoob.txt';

mysql 导入数据

1.mysql 命令导入
mysql -u 用户名 -p密码 <要导入的数据库数据(runoob.sql)

source 命令导入
create database abc 创建数据库
use abc 使用已创建的数据库
set names utf8 设置编码
source/home/abc/abc.sql 导入备份数据库

本文转自 https://blog.csdn.net/thankszmy/article/details/87364803,如有侵权,请联系删除。

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Easter79 Easter79
2年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这