mysql基础一(纯sql语句)

数据库知识是每个开发人员必备的技能之一,但是真正花时间去了解的就比较少了,大部分都是可视化工具,简单的sql语句,在工作中基本上够用了,但是如果没有可视化工具,你对自己有多少的信心呢?反正我是好多都记不住(一个完整的创建表的sql我都写不下来,呜呜呜),这一系列博客,就简单介绍下我们传统的SQL语句怎么写(主要也是增进一下自己对数据库sql语句的认知)。所有的展示直接在虚拟机上进行了,安装mysql的过程就不展示了(是不是比较懒,哈哈哈)

创建数据库:

官方给的标准创建数据库的sql语法:


CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name
    [create_specification] ...

create_specification:
    [DEFAULT] CHARACTER SET [=] charset_name
  | [DEFAULT] COLLATE [=] collation_name

shcema和database是同义词,都可以用来创建数据库;如果db_name数据库存在,你需要加上if not exists,不然会出错,character set 指定数据库编码格式 

我们先来创建数据库(创建数据库并指定编码格式为utf8):

create database if not exists db_test default character set utf8;

 

有了数据库我们就可以创建表了。

官方语法太多,贴出部分,感兴趣的可以自行到官网查看:https://dev.mysql.com/doc/refman/5.6/en/create-table.html#create-table-name

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
    (create_definition,...)
    [table_options]
    [partition_options]

我们来创建自己的测试表:

id int not null auto_increment primary key comment '主键'(列名:id,类型int,不能为null,自动递增,主键,注释为:主键)

create table if not exists t_test(id int not null auto_increment primary key comment '主键',name varchar(50) comment '姓名',age age tinyint comment '年龄');

有了表我们才能插入数据:

官方地址:https://dev.mysql.com/doc/refman/5.6/en/insert.html

我看网上有人说value和values执行顺序有比较大的差别,value比较快,不知道可不可行,有想深入了解的就得自己找找资料了。

INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
    [INTO] tbl_name
    [PARTITION (partition_name [, partition_name] ...)]
    [(col_name [, col_name] ...)]
    {VALUES | VALUE} (value_list) [, (value_list)] ...
    [ON DUPLICATE KEY UPDATE assignment_list]

INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
    [INTO] tbl_name
    [PARTITION (partition_name [, partition_name] ...)]
    SET assignment_list
    [ON DUPLICATE KEY UPDATE assignment_list]

INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]
    [INTO] tbl_name
    [PARTITION (partition_name [, partition_name] ...)]
    [(col_name [, col_name] ...)]
    SELECT ...
    [ON DUPLICATE KEY UPDATE assignment_list]

value:
    {expr | DEFAULT}

value_list:
    value [, value] ...

assignment:
    col_name = value

assignment_list:
    assignment [, assignment] ...

插入我们自己的数据:

insert into t_test(id,name,age) values(2,'wangwu',15) (3,'xiaohong',15);

有了数据,难道你不想看看这些数据在数据库是否真正的成功了吗?我们有select语句:

select * from t_test;

 我们多插入几条数据之后(有重复的数据?现实中重名的也有啊,正常,哈哈):

mysql基础一(纯sql语句)_第1张图片

 如何删除数据?delete就行了:

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]

 删除指定id的数据:

 delete from t_test where id = 2;

现在有个需求是:删除姓名为zhangsan并且年龄最大,如何办?

有人说先把最大年龄查出来,再拿age做比较。这样是可以做到,但是没有发现多了一步操作吗?

mysql> delete from t_test 
    -> where age = (select max(age) from t_test where name='zhangsan');

 当然还有别的方法,但是我说的是运用delete官方给的另一种方法。 我们可以仔细看下官方给的delete语句是什么样的?

order by...这不是排序吗?limit row_count 这不是限定行数的吗?是的,那么上面那个需求我们可以怎么做?

name为zhangsan的,按照age从大到小排序,limit限定删除1行,是不是也是可以的?

 delete from t_test where name='zhangsan' order by age desc limit 1;

 如何修改数据:

update语句:

UPDATE [LOW_PRIORITY] [IGNORE] table_reference
    SET assignment_list
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]

value:
    {expr | DEFAULT}

assignment:
    col_name = value

assignment_list:
    assignment [, assignment] ...

 我们先来来吧wangwu的年龄改为20,修改多个字段英文的逗号(,)隔开就行

mysql> update t_test set age=20 where name='wangwu';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

 

你可能感兴趣的:(数据库)