zoukankan      html  css  js  c++  java
  • mysql库、表、索引

    创建和删除数据库,同一个数据库下的不同表可以采用不同的引擎

    mysql> create database oldboy default character set utf8 collate utf8_generial_ci;

    mysql> drop database oldboy;

    创建表,5.5之后默认引擎为InnoDB

    mysql> create table student t (id int,name varchar(20),hobby varchar(20) ) engine=MyISAM charset=utf8;

    mysql> drop table student;

    索引类似书本的目录,可以加快查询速度

    索引需要占用系统空间,更新数据库时也需要维护索引,因此是把双刃剑,数十到几百行的小表无需建立索引,读取较少更新频繁的表要少建立索引。

    向表中插入数据,mysql中可以一个insert插入多条记录,多个记录之间用逗号分隔

    mysql> insert into student values (1,'Alice','flower'),(2,'Bob','tennis'),(3,'Jack','book'),(4,''Jane,'dance');

    查询数据

    mysql> select name,hobby from student where id>2 [limit [3,]8];

    limit m,n表示在符合条件的结果中,再从第m+1条开始,筛选n条记录;limit只跟一个参数表示从第一条开始筛选出n条记录。

    在查询语句select前加explain可查看执行计划

    mysql> explain select * from test where id>3 limit 3,2 G
    *************************** 1. row ***************************
               id: 1
      select_type: SIMPLE
            table: test
             type: range  #(扫描范围,all或range)
    possible_keys: PRIMARY  #(可能走的索引)
              key: PRIMARY
          key_len: 4
              ref: NULL
             rows:   6#(扫描行数)
            Extra: Using where
    1 row in set (0.00 sec)

    索引类似书本的目录,可以加快查询速度,同时需要占用系统空间,更新数据库时也需要维护索引,因此索引是把双刃剑。

    数十到几百行的小表无需建立索引,读取较少更新频繁的表要少建立索引。

    索引可分为主键索引和普通索引(auto_increment自动增长的列必须设置索引),可以在单列上创建索引,也可以在多列上创建索引。

    表创建后增加和删除主键索引

    mysql> alter table student add primary key(id);

    mysql> alter table student drop primary key;

    表创建后增加和删除唯一索引

    mysql>alter table student add unique index unique_id(id);

    (也可以使用create语句创建唯一索引 mysql> create unique index unique_id on student(id); )

    mysql> alter table student drop index unique_id;

    (也可以使用drop语句删除唯一索引 mysql> drop index unique_id on student; )

    表创建后增加和删除普通索引

    mysql> alter table student add index index_dept(dept);

    (也可以使用create语句创建普通索引 mysql> create index index_dept on student(dept); )

    mysql> alter table student drop index index_dept;

    (也可以使用drop语句删除普通索引 mysql> drop index index_dept on student; )

    表创建后增加和删除复合索引 (复合索引具有前缀生效特性,例如index(a,b,c),只有查询条件a、ab、abc三种情况才会走索引)

    mysql>create index index_name_dept on student(name(8),dept(10));(对name的前8和dept的前10个字符创建复合索引)

    创建表时创建索引

    create table student2 (

      id int(4) NOT NULL  auto_increment,name char(10)  NOT NULL,age tinyint(2) NOT NULL DEFAULT 0,dept varchar(16) DEFAULT NULL,

      primary key(id),unique index index_id(id),index index_dept(dept)

    );或者

    create table student2 (

      id int(4) NOT NULL  auto_increment,name char(10)  NOT NULL,age tinyint(2) NOT NULL DEFAULT 0,dept varchar(16) DEFAULT NULL,

      primary key(id),unique (id),key index_dept(dept)

    );

    修改表名

    rename table 原表名 to 新表名   或者   alter table 原表名 rename to 新表名

    mysql>rename table stu to student;

    mysql>alter table student rename to stu;

    增加字段

    alter table 表名 add 字段名 类型 [约束] [ first|after 字段] [,add 字段名 类型]

    mysql>alter table student add sex tinyint(2) default male after name;

    增加字段时如有约束可以同时添加,增加的字段默认为最后一个字段,first表示新增的为第一个字段,after 字段表示在该字段的后增加;逗号加add可同时添加多个列

    删除字段

    alter table 表名 drop 字段

    mysql>alter table student drop sex;

    修改字段的数据类型

    alter table 表名 modify 字段 新类型

    mysql>alter table student modify name varchar(20);

    修改字段名(需同时修改数据类型)

    alter table 表名 change 原字段名 新字段名 类型

    mysql>alter table student change id number int(4);

    更新数据update和删除数据delete,记得要用where过滤条件,否则修改的就是整个表的数据

    mysql> update student set hobby='swimming' where id=4;

    mysql> delete from student where id<3;

    alias mysql=’mysql -U’(永久生效需要写入/etc/profile)

    在同一个界面退出重新以mysql登录时,如果执行不带where条件的update和delete时,数据库会报错

    参考视频 http://blog.51cto.com/oldboy/1321061

    delete逻辑删除,按行删,truncate直接清除物理文件,truncate删除更快

  • 相关阅读:
    Python学习笔记013_正则表达式
    Python学习笔记012_网络_异常
    Python学习笔记011_模块_标准库_第三方库的安装
    Python学习笔记010_迭代器_生成器
    PHP extract() 函数
    php 获取客户端IP
    php array_walk
    PHP array_map()
    PHP call_user_func
    类的更新----MVC设计模式
  • 原文地址:https://www.cnblogs.com/Forever77/p/10051581.html
Copyright © 2011-2022 走看看