search
HomeDatabaseMysql Tutorialmysql基础操作、sql技巧和sql的常见优化_MySQL

一、常见操作

1、复制表结构create table t2 like t1

   复制表数据insert into t2 select * from t1
2、mysql索引
   alter table用来创建普通索引、unique索引或primary key索引
   alter table t add index index_name(column_list)
   alter table t add unique(column_list)
   alter table t add primary key(column_list)
    
   create index index_name on table (column_list)
   create unique index index_name on table(column_list)
   drop index index_name on t
   alter table t drop index index_name
   alter table t drop primary key
   alter table t modify id int not null
   show index form t
3、视图
   create view v as select * from t where id>5
   insert into t(name) values("user"),("user1")
   ? view | ? index
   alter view | create view | drop view
   一旦与视图关联的表损坏,则视图会发生错误
4、内置函数
   字符串:
    concat("hello","world") as hw 链接字符串
    lcase("GAFG")//转小写
    ucase("jjj")
    length(string) //长度
    ltrim(string)   //去掉前端空格
    rtrim(string) //去掉右端空格
    repeat(string,count)//重复count次
    replace(string,s1,s2)//在string中把s1替换成s2
    substring(str,position,[length])//在str中,从position开始取length个字符
    space(count) 生成count个空格
   数学函数:
    bin(number) //十进制转二进制
    ceiling(number)//向上取整
    floor(number) //向下取整
    max(num1,num2)//取最大值
    min(num1.num2)
    sqrt(number)//开平方
    rand() //返回0-1内的随机值
   日期函数:
    curdate()//返回当前日期
    curtime()
    unix_timestamp(date)//返回当前date的
    week(date)//返回date为一年中的第几周
    year(date)//返回日期date的年份
    datediff(expr,expr2)//两个时间之间的间隔天数
5、mysql预处理语句
   设置stmt1预处理:
   prepare stmt1 from 'select * from t where id>?'
   设置一个变量: set @i = 1;
   执行stmt1预处理:execute stmt1 using @i
   set @i=5
   execute stmt1 using @i
    删除预处理:drop prepare stmt1
 
6、 mysql事务处理
    关闭自动提交功能:set autocommit=0;
    delete from t where id = 11;
    savepoint p1;
    delete from t where id = 12;
    savepoint p2;
    rollback to p1;
    rollback;//还原到最原始的还原点
    alter table t engine=innodb;//事务控制只对innodb引擎有用
7、mysql存储procedure
    create procedure p2()
    begin
    set @i = 3;
    while @i    insert into t(name) values(concat('hh',@i));
    set @i=@i+1;
    end while;
    end;
    shwo create procedure p2;
    call p2;
8、mysql 触发器
    create trigger tg before insert on t for each row
    begin insert into t2(name) values(new.name)
    end
    create trigger tg before delete on t for each row
    begin delete from t2 where name = old.name
    end
9、重排auto_increment
   清空表的时候用truncate
   alter table t auto_increment = 1;
二、常见sql技巧
 1、正则表达式的使用(和其他语言一样)
    select "linux is very good!" regexp ".*"//匹配所有
    select "linux is very good!" regexp "^linux"
    select email from user where emial regexp "@163[.,]com$"
    =
    select email from user where emial like '%@163.com$' or emial like '%@163,com$'
 2、巧用rand()提取随即行
     0-1之间的随机数函数 select rand()*100
     select * from t order by rand();//随即排列表数据
     select * from t order by rand() limit 3;//取出三条随即样本
 3、利用group by的with roolup字句统计,不可以和order by使用
     可以检索出更多的分组聚合信息
     select * from t;
     select * ,count(*)from t group by c1,c2//先对c1聚合
     select * ,count(*)from t group by c1,c2 with roolup
 4、用bit group functions做统计
     在使用group by语句时可以使用bit_and、bit_or函数来完成统计工作。这两个函数的作用主要是做数值
     之间的逻辑位运算。
     select id,bit_or(kind) from t group by id
 5、使用外键需要注意的问题
     create table t (id ,name,foreign key(id) references t1(id) on delete cascade on update cascade)
     innodb类型的表支持外键,myisam类新的表虽然创建外键可以成功,但是不起作用,主要原因是不支持外键。
 6、mysql中help的使用
     ? %
     ? create
     ? opti%
     ? reg%
     ? contents     mysql中所有的帮助信息
三、sql优化
 1、优化sql语句的一半步骤
    show status了解各种sql的执行频率
    show [session|globe] status;
    show global status;
    show status like 'com_%'
    show global  status like "com_%"
    只针对innodb存储引擎的:
       innodb_rows_read 执行select操作的次数
       innodb_rows_updated/inserted/deleted
    show variables like 'slow%'
    show variables like 'long%'
    show status like connections链接mysql的数量
    show status like uptime 服务器已经工作的秒数
    show status like slow_queries慢查询的次数
    定位执行效率低的sql语句
    explain/desc select * from table where id>10
    desc select * from table where id>10/G
 2、索引问题
    常见优化手段之一
    myisam存储引擎的数据和索引时自动分开存储的。各自是独一的一个文件
    innodb存储引擎的表的数据和索引是存储在同一个表空间里面,但可以有多个文件组成
    mysql不支持函数索引,但是能对列的前面某一部分进行索引,例如name字段,可以对name的
  前4个字符进行索引,这个特性可以大大缩小索引文件的大小
    create index index_name on t (name(4))
    mysql索引用于快速查找出某一个列中有定特定值的行,对相关列使用索引时是提高select操作性能的最佳途径
    1、使用索引
       对于创建多列索引,只要查询的条件中用到最左边的列,索引一般会被使用
       create index iname on t (name,age)//符合索引
    2、存在索引但是不使用索
     如果mysql估计使用索引比全表扫描慢,则不使用索引,例如keypart均匀分布在1-100之间,查询时使用索引就不是很好
     eg:select * from t where keypart>1 and keypart     如果使用t表并且where条件中不使用=进行索引列,则不使用到索引。
     用or分隔开的条件如果or前的条件中的列有索引,后面的列中没有索引,
则涉及到的索引都不会用到,索引都需要用索引
     如果列类型是字符串,但是在查询的时候把一个整数型常量付给了字符型的列name,那么在name列上有索引也不会用到
    
    3、常用sql的优化
      大批量插入数据:infile outfile
    当用load命令导入数据的时候,适当设置可以提高导入的速度,
    4、常用的sql优化
   insert语句,尽量使用多个值表的insert语句,这样可以大大缩短客户与数据库连接关闭的消耗
   可以使用insert delayed语句得到更高的效率
Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
MySQL: BLOB and other no-sql storage, what are the differences?MySQL: BLOB and other no-sql storage, what are the differences?May 13, 2025 am 12:14 AM

MySQL'sBLOBissuitableforstoringbinarydatawithinarelationaldatabase,whileNoSQLoptionslikeMongoDB,Redis,andCassandraofferflexible,scalablesolutionsforunstructureddata.BLOBissimplerbutcanslowdownperformancewithlargedata;NoSQLprovidesbetterscalabilityand

MySQL Add User: Syntax, Options, and Security Best PracticesMySQL Add User: Syntax, Options, and Security Best PracticesMay 13, 2025 am 12:12 AM

ToaddauserinMySQL,use:CREATEUSER'username'@'host'IDENTIFIEDBY'password';Here'showtodoitsecurely:1)Choosethehostcarefullytocontrolaccess.2)SetresourcelimitswithoptionslikeMAX_QUERIES_PER_HOUR.3)Usestrong,uniquepasswords.4)EnforceSSL/TLSconnectionswith

MySQL: How to avoid String Data Types common mistakes?MySQL: How to avoid String Data Types common mistakes?May 13, 2025 am 12:09 AM

ToavoidcommonmistakeswithstringdatatypesinMySQL,understandstringtypenuances,choosetherighttype,andmanageencodingandcollationsettingseffectively.1)UseCHARforfixed-lengthstrings,VARCHARforvariable-length,andTEXT/BLOBforlargerdata.2)Setcorrectcharacters

MySQL: String Data Types and ENUMs?MySQL: String Data Types and ENUMs?May 13, 2025 am 12:05 AM

MySQloffersechar, Varchar, text, Anddenumforstringdata.usecharforfixed-Lengthstrings, VarcharerForvariable-Length, text forlarger text, AndenumforenforcingdataAntegritywithaetofvalues.

MySQL BLOB: how to optimize BLOBs requestsMySQL BLOB: how to optimize BLOBs requestsMay 13, 2025 am 12:03 AM

Optimizing MySQLBLOB requests can be done through the following strategies: 1. Reduce the frequency of BLOB query, use independent requests or delay loading; 2. Select the appropriate BLOB type (such as TINYBLOB); 3. Separate the BLOB data into separate tables; 4. Compress the BLOB data at the application layer; 5. Index the BLOB metadata. These methods can effectively improve performance by combining monitoring, caching and data sharding in actual applications.

Adding Users to MySQL: The Complete TutorialAdding Users to MySQL: The Complete TutorialMay 12, 2025 am 12:14 AM

Mastering the method of adding MySQL users is crucial for database administrators and developers because it ensures the security and access control of the database. 1) Create a new user using the CREATEUSER command, 2) Assign permissions through the GRANT command, 3) Use FLUSHPRIVILEGES to ensure permissions take effect, 4) Regularly audit and clean user accounts to maintain performance and security.

Mastering MySQL String Data Types: VARCHAR vs. TEXT vs. CHARMastering MySQL String Data Types: VARCHAR vs. TEXT vs. CHARMay 12, 2025 am 12:12 AM

ChooseCHARforfixed-lengthdata,VARCHARforvariable-lengthdata,andTEXTforlargetextfields.1)CHARisefficientforconsistent-lengthdatalikecodes.2)VARCHARsuitsvariable-lengthdatalikenames,balancingflexibilityandperformance.3)TEXTisidealforlargetextslikeartic

MySQL: String Data Types and Indexing: Best PracticesMySQL: String Data Types and Indexing: Best PracticesMay 12, 2025 am 12:11 AM

Best practices for handling string data types and indexes in MySQL include: 1) Selecting the appropriate string type, such as CHAR for fixed length, VARCHAR for variable length, and TEXT for large text; 2) Be cautious in indexing, avoid over-indexing, and create indexes for common queries; 3) Use prefix indexes and full-text indexes to optimize long string searches; 4) Regularly monitor and optimize indexes to keep indexes small and efficient. Through these methods, we can balance read and write performance and improve database efficiency.

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

WebStorm Mac version

WebStorm Mac version

Useful JavaScript development tools

PhpStorm Mac version

PhpStorm Mac version

The latest (2018.2.1) professional PHP integrated development tool

mPDF

mPDF

mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),